为了账号安全,请及时绑定邮箱和手机立即绑定

使用 selenium 和 phantomJS 以及 python 在 iframe

使用 selenium 和 phantomJS 以及 python 在 iframe

慕标5832272 2023-07-05 10:05:25
好吧,我卡住了。我使用 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_sourcesoup = BeautifulSoup(page,'html.parser')
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

您无法获得完整的 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()


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信