无法使用Python scrapy和selenium从JavaScript网页中选择元素



我正在尝试创建一个收集一些数据的应用程序。我在Windows 10上使用了python 2.7和selenium。

https://aca3.accela.com/atlanta_ga/default.aspx

无法单击标有"搜索许可/投诉"的botton

我已经使用了Chrome Dev工具来检查XPath等。

这是我正在使用的代码:

import scrapy
from selenium import webdriver
class PermitsSpider(scrapy.Spider):
  name = "atlanta"
  url = "https://aca3.accela.com/Atlanta_Ga/Default.aspx"
  start_urls = ['https://aca3.accela.com/Atlanta_Ga/Default.aspx',]
  def __init__(self):
    self.driver = webdriver.Chrome()
    self.driver.implicitly_wait(20)
  def parse(self, response):
    self.driver.get(self.url)
    time.sleep(15)
    search_button = self.driver.find_element_by_xpath('//*[@id="ctl00_PlaceHolderMain_TabDataList_TabsDataList_ctl01_LinksDataList_ctl00_LinkItemUrl"]')
    search_button.click()

运行该代码时,我会收到以下错误:

nosuchelementException:消息:没有这样的元素:无法找到元素:{"方法":" xpath"," selector":"//*@ID =" ctl00_placeholdmain_tabdatalist_tabdatalist_tabsdatalist_tabsdatalist_ctl01_linksdatalist_linksdatalist_ctl00_ctl00_ctl00_linkitemurlinkitemurl} p>我已经添加了所有睡眠和等待等庄园,以确保在尝试选择之前将页面满载。我还尝试选择链接文本和其他选择元素的方法。不知道为什么此方法在此页面上不起作用,在此页面上对我有效。在运行代码时,WebDriver确实在我的屏幕上打开页面,我看到了加载页面,等等。

任何帮助将不胜感激。谢谢...

位于iframe内部的目标链接,因此您必须切换到该框架才能处理嵌入式元素:

self.driver.switch_to_frame('ACAFrame')
search_button = self.driver.find_element_by_xpath('//*[@id="ctl00_PlaceHolderMain_TabDataList_TabsDataList_ctl01_LinksDataList_ctl00_LinkItemUrl"]')

您可能还需要使用driver.switch_to_default_content()

切换

最新更新