使用带有 python 的 selenium 和 phantomJS 在 iframe 中获取完全生成的 DOM 元素

Get fully generated DOM elements inside iframe using selenium and phantomJS with python

好的,我卡住了。我正在使用 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>

我想获得 iframe2src。我试图通过我的 webdriver 运行 src1 URL 但我得到的只是原始页面 html,而不是加载的网页元素,iframe2 必须是由 iframe1 中的某个脚本创建,但我无法让我的 webdriver 访问 运行 该脚本。

有什么想法吗?

这是我对网页上的 运行 javascript 所做的以获取编译页面 DOM:

from selenium import webdriver 

self.driver = webdriver.PhantomJS()
self.driver.get(url)
page = self.driver.page_source
soup = BeautifulSoup(page,'html.parser')

您无法获得完整的 page_source。如果是iframe,应该使用如下命令:switch_to.frame(iframe_element),这样就可以得到

里面的一个元素
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

self.driver = webdriver.PhantomJS()
self.driver.get(url)



WebDriverWait(self._driver, 50).until(
            EC.presence_of_all_elements_located
            ((By.XPATH,
              '//iframe[@id="iframegame"]'))
        )

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()