使用 selenium 和 phantomJS 以及 python 在 iframe

好吧,我卡住了。我使用 selenium 和 PhantomJS 制作了一个小的网页抓取 python 脚本。我正在处理的页面在 iframe 文档中包含我想要的数据,但我的 Web 驱动程序未运行。


<main Page Heads etc>


   <blah>


   <iframe 1 src="src1" ... etc etc>

    #document

      <tag>

      <tag>

      <iframe2 src="src2"><iframe2>

   <iframe1>


   <blah>


<end of webpage DOM>

我想得到src的iframe2. 我尝试src1通过我的网络驱动程序运行 URL,但我得到的只是原始页面 html,而不是加载的网页元素,iframe2必须由内部的某个脚本创建iframe1,但我无法让我的网络驱动程序运行该脚本。


有任何想法吗?


这是我在网页上运行 javascript 来获取编译后的页面 DOM 的方法:


from selenium import webdriver 


self.driver = webdriver.PhantomJS()

self.driver.get(url)

page = self.driver.page_source

soup = BeautifulSoup(page,'html.parser')


慕标5832272
浏览 102回答 1
1回答

湖上湖

您无法获得完整的 page_source。对于iframe,您应该使用以下命令:switch_to.frame(iframe_element),这样您就可以获取其中的元素from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECself.driver = webdriver.PhantomJS()self.driver.get(url)WebDriverWait(self._driver, 50).until(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EC.presence_of_all_elements_located&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((By.XPATH,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '//iframe[@id="iframegame"]'))&nbsp; &nbsp; &nbsp; &nbsp; )iframe_element = self.driver.find_element_by_xpath('//iframe[@id="iframegame"]')self.driver.switch_to.frame(iframe_element)tag = self.driver.find_element_by_xpath('//tag')再次返回,您可以使用以下命令获取 iframe 的外部元素;self.driver.switch_to.default_content()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python