首页 > 解决方案 > 如何使用 Selenium 和 Python 在 GitHub 页面 https://github.com/ 上单击登录元素

问题描述

我正在尝试使用 Selenium for python 单击 github 顶部的登录链接。我试过使用find_element_by_link_text(),但我得到一个NoSuchElementException。然后我尝试使用find_element_by_xpath()并得到一个ElementNotinteractableException。这是第一个的代码:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://github.com')

signin = browser.find_element_by_link_text('Sign in')
signin.click()

这是第二个的代码。

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://github.com')

signin_link = browser.find_element_by_xpath('/html/body/div[1]/header/div/div[2]/div[2]/a[1]')
signin_link.click()

我什至尝试过find_element_by_css_selector(),但也得到了ElementNotInteractableException。我不明白出了什么问题。我不想放 html,但如果你去 github,它只是右上角的登录链接。

标签: pythonseleniumxpathcss-selectorswebdriverwait

解决方案


要使用Selenium在 GitHub 页面https://github.com/右上角click()的元素上,您需要诱导WebDriverWait,您可以使用以下任一Locator StrategiesSign inelement_to_be_clickable()

  • 使用PARTIAL_LINK_TEXT

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Sign"))).click()
    
  • 使用CSS_SELECTOR

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href='/login']"))).click()
    
  • 使用XPATH

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(., 'Sign')]"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

推荐阅读