【问题标题】:Unable to click on element using Python Selenium无法使用 Python Selenium 单击元素
【发布时间】:2018-05-26 17:19:33
【问题描述】:

我正在开发一个程序,该程序将帮助我在位于窗口右上角的https://www.pcfinancial.ca/ 的下拉菜单中选择第二个选项。到目前为止,这是我的代码:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import ui

driver = webdriver.Chrome() 

driver.get('https://www.pcfinancial.ca/');
driver.find_element_by_xpath('//*[@id="lnkSignInOp"]').click() #click on dropdown menu - working
driver.find_element_by_xpath('//*[@id="PCM"]/a').click() #select "pc mastercard" - not working

奇怪的是,我可以使用第一行 driver.find_elements_by_xpath(...) 访问下拉菜单,但在选择第二个选项时出现以下错误。

Traceback (most recent call last):
  File "C:\Users\Imad\Documents\Programming\Python\test.py", line 10, in <module>
    driver.find_element_by_xpath('//*[@id="PCM"]/a').click() #open up dropdown menu works
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 501, in _execute
    return self._parent.execute(command, params)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  (Session info: chrome=63.0.3239.84)
  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.16299 x86_64)

谁能帮助我了解发生了什么以及如何解决这个问题?提前致谢!

【问题讨论】:

    标签: python google-chrome selenium xpath


    【解决方案1】:

    根据WebSite,链接文本中的WebElement PC MasterCard&lt;a&gt;标签内,所以我们将构造一个唯一的xpath,如下所示:

    from selenium import webdriver
    
    driver = webdriver.Chrome() 
    driver.get('https://www.pcfinancial.ca/');
    driver.find_element_by_xpath('//*[@id="lnkSignInOp"]').click() #click on dropdown menu - working
    driver.find_element_by_xpath("//a[@href='#PCM' and @rel='/re_register/index.html']").click() #click on "PC MasterCard" - now working
    print("Clicked on PC MasterCard")
    

    【讨论】:

    • 感谢您的回复,但这实际上是我尝试过的事情之一。可悲的是,我得到了同样的错误。不过,我从上一个人那里得到了答案。
    【解决方案2】:

    这是计时问题的经典案例。打开下拉菜单后,等待菜单链接可点击,WebDriverWaitelement_to_be_clickable 预期条件:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver, 10)
    
    driver.get('https://www.pcfinancial.ca/')
    driver.find_element_by_xpath('//*[@id="lnkSignInOp"]').click()
    
    
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#PCM a"))).click()
    

    【讨论】:

    • 非常感谢!我不知道网页实际加载后需要等待时间。至于WebDriverWait,你知道10在什么单位吗?只是出于好奇而询问,以便我知道下次什么是“太长”
    • @ImadKalboneh 没问题,很高兴它对你有用。 10 是“秒”,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2016-12-05
    • 2019-03-19
    • 2019-04-13
    相关资源
    最近更新 更多