Python 单击按钮

Python 单击按钮,python,selenium,web-scraping,Python,Selenium,Web Scraping,硒的新品种。 尝试单击下表中的“评论”。 我试过下面的解决方案。它可以工作,但Python在单击“review”后抛出异常。希望有人能解释Python抛出异常的原因以及如何解决它? 跟踪结果如下所示: Traceback (most recent call last): File "C:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2885, in run_code exec(code_obj

硒的新品种。 尝试单击下表中的“评论”。 我试过下面的解决方案。它可以工作,但Python在单击“review”后抛出异常。希望有人能解释Python抛出异常的原因以及如何解决它? 跟踪结果如下所示:

Traceback (most recent call last):
  File "C:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2885, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-19-53ed02f5557e>", line 1, in <module>
    browser.find_element(By.CSS_SELECTOR, "a.eiCell.cell.reviews").click()
  File "C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 77, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 493, in _execute
    return self._parent.execute(command, params)
  File "C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Reached error page: about:neterror?e=dnsNotFound&u=https%3A//.fls.doubleclick.net/activityi%3Bsrc%3D%3Btype%3Dinvmedia%3Bcat%3D%3Bu1%3D3f32e44c-d5d6-4d78-a817-7c9e0dd561a0%3Bord%3D8823339925721%3B%7Eoref%3Dhttps%253A%252F%252Fwww.glassdoor.com%252FReviews%252FGoogle-Reviews-E9079.htm%3F&c=UTF-8&f=regular&d=Firefox%20can%E2%80%99t%20find%20the%20server%20at%20.fls.doubleclick.net.

    # code
    browser = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Mozilla Firefox\geckodriver.exe')
    url = 'https://www.glassdoor.com/Reviews/index.htm'
    browser.get(url)
    browser.find_element_by_id('KeywordSearch').send_keys('google')
    browser.find_element_by_id('HeroSearchButton').click()
    time.sleep(5)
    # click the review button
    # below code works but throw an exception after clicking "review".
    browser.switch_to_window(browser.window_handles[1]) 
    browser.find_element(By.CSS_SELECTOR, ".eiCell.cell.reviews").click() 

[![enter image description here][1]][1]
回溯(最近一次呼叫最后一次):
文件“C:\Anaconda3\lib\site packages\IPython\core\interactiveshell.py”,第2885行,运行代码
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
browser.find_元素(By.CSS_选择器,“a.eiCell.cell.reviews”)。单击()
文件“C:\Anaconda3\lib\site packages\selenium\webdriver\remote\webelement.py”,第77行,单击
self.\u执行(命令。单击\u元素)
文件“C:\Anaconda3\lib\site packages\selenium\webdriver\remote\webelement.py”,第493行,在\u execute中
返回self.\u parent.execute(命令,参数)
文件“C:\Anaconda3\lib\site packages\selenium\webdriver\remote\webdriver.py”,第256行,执行
self.error\u handler.check\u响应(响应)
文件“C:\Anaconda3\lib\site packages\selenium\webdriver\remote\errorhandler.py”,第194行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.WebDriverException:消息:到达错误页面:关于:neterror?e=dnsNotFound&u=https%3A/.fls.doubleclick.net/activityi%3Bsrc%3D%3invmedia%3Bcat%3D%3Bu1%3df32e44c-d5d6-4d78-a817-7c9e0dd561a0%3Bord%3D8823339925721%3B%eoref%3dtps%253A%252F%fwwww.glassdoor.com%252FReviews%252fviews%252FGoogle-Reviews-E9079.htm%3F&c=UTF-8&d=20d=209920%20%20%fl%20%20sbleclick.net。
#代码
browser=webdriver.Firefox(可执行文件\u path=r'C:\Program Files(x86)\Mozilla Firefox\geckodriver.exe')
url='1〕https://www.glassdoor.com/Reviews/index.htm'
browser.get(url)
浏览器。按id(“关键字搜索”)查找元素。发送关键字(“谷歌”)
浏览器。按\u id(“HeroSearchButton”)查找\u元素。单击()
时间。睡眠(5)
#单击“审阅”按钮
#下面的代码可以工作,但单击“review”后会引发异常。
browser.switch_到_窗口(browser.window_句柄[1])
browser.find_元素(By.CSS_选择器“.eiCell.cell.reviews”)。单击()
[![在此处输入图像描述][1][1]

因为元素有多个类,您应该使用:

browser.find_element(By.CSS_SELECTOR, ".eiCell.cell.reviews").click()

因为元素有多个类,所以应该使用:

browser.find_element(By.CSS_SELECTOR, ".eiCell.cell.reviews").click()

链接文本和部分链接文本的问题在于,它们希望文本实际包含在
A
标记中。在这种情况下,文本包含在
SPAN
中,该SPAN是
a
标记的子项,因此它们失败。按类名排列的中间大小写不起作用,因为您只能指定一个类名,并且提供了3个。在这种情况下,您可以使用CSS选择器指定
a
标记,如

a.eiCell.cell.reviews
或者使用XPath指定包含“审阅”文本的
SPAN

//span[.='Reviews'][@class='subtle']

两者都应该有效。我更喜欢CSS选择器,因为CSS选择器在各种浏览器上都更快、更受支持,但如果它不起作用,请尝试XPath。

链接文本和部分链接文本的问题是,它们希望文本实际包含在
标记中。在这种情况下,文本包含在
SPAN
中,该SPAN
a
标记的子项,因此它们失败。按类名排列的中间大小写不起作用,因为您只能指定一个类名,并且提供了3个。在这种情况下,您可以使用CSS选择器指定
a
标记,如

a.eiCell.cell.reviews
或者使用XPath指定包含“审阅”文本的
SPAN

//span[.='Reviews'][@class='subtle']

两者都应该有效。我更喜欢CSS选择器,因为CSS选择器在各种浏览器上都更快、更受支持,但如果它不起作用,请尝试XPath。

以下是您问题的答案:

您可以使用下面的代码行单击图表中的“评论”

browser.find_element_by_xpath("//a[@class='eiCell cell reviews']//span[@class='subtle']").click()

如果回答了您的问题,请告诉我。

以下是您问题的答案:

您可以使用下面的代码行单击图表中的“评论”

browser.find_element_by_xpath("//a[@class='eiCell cell reviews']//span[@class='subtle']").click()

如果这能回答您的问题,请告诉我。

尝试使用
浏览器。通过xpath('//a[@class=“eiCell cell-reviews”和contains(text(),“reviews”)”)查找元素。
也可以尝试使用
浏览器。通过xpath('//span[@class=“微妙”和contains(text(),“reviews”)查找元素。
浏览器。通过xpath('//span[@class=“微妙”和contains)查找元素(text(),“Reviews”)]/parent::a')
尝试这三种方法的结果是什么?请编辑您的问题并添加这些信息,因为这很重要,可能有助于诊断问题。请阅读原因。粘贴代码并正确设置格式。尝试
浏览器。通过xpath('//a[@class=“eiCell cell cell Reviews”)查找元素和contains(text(),“Reviews”)]'
也可以尝试使用
浏览器。通过xpath('//span[@class=“微妙”和contains(text(),“Reviews”)]')查找元素。
浏览器。通过xpath('//span[@class=“微妙”和contains(text(),“Reviews”)]/parent::a'查找元素
当您尝试这三种方法时,结果如何?请编辑您的问题并添加这些信息,因为这很重要,并且可能有助于诊断问题。请阅读原因。粘贴代码并正确设置格式。我不会贬低您帮助解决OP的努力和答案,但首先您有了menti,这难道不令人困惑吗CSS选择器在各种浏览器上都更快、更受支持,但接下来你说的是
如果不起作用,试试XPath
。你的意思是说有一些
XPath
不能通过
CSS
表达吗?Thanks@DebanjanB是的,任何查找包含文本的定位器都无法完成使用CSS选择器,但只能使用XPath(使用链接或部分链接文本的
a
标记中的文本之外)。这基本上是使用XPath定位器的少数原因之一。您能给我介绍一个示例HTML吗