使用带有 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>
我想获得 iframe2
的 src
。我试图通过我的 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()
好的,我卡住了。我正在使用 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>
我想获得 iframe2
的 src
。我试图通过我的 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()