Python 3.x 无法使用python和selenium单击链接

Python 3.x 无法使用python和selenium单击链接,python-3.x,selenium,selenium-chromedriver,Python 3.x,Selenium,Selenium Chromedriver,为什么在导航到给定的网站后,我不能点击右上方的登录部分?我得到一个错误: from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from se

为什么在导航到给定的网站后,我不能点击右上方的登录部分?我得到一个错误:

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


# go to website
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(executable_path="chromedriver.exe", chrome_options=chrome_options)
action = webdriver.ActionChains(driver)
driver.get('https://www.clinicalkey.com/#!/browse/book/3-s2.0-C2016100010X')

# look for "login" and click
loginclick = driver.find_element_by_xpath("//*[@id='header']/div[3]/ol/li[3]/a/span").click()
发生异常:NoTouchElementException 消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id='header']]/div[3]/ol/li[3]/a/span”} (会话信息:chrome=85.0.4183.83) 文件“C:\python\download.py”,第18行,在 loginclick=driver。通过xpath(“/*[@id='header']/div[3]/ol/li[3]/a/span”)查找元素。单击() 谢谢大家!

两个原因:

1:等待元素加载

2:由于元素在页面上不可见,请使用java脚本单击

Exception has occurred: NoSuchElementException
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='header']/div[3]/ol/li[3]/a/span"}
  (Session info: chrome=85.0.4183.83)
  File "C:\python\download.py", line 18, in <module>
    loginclick = driver.find_element_by_xpath("//*[@id='header']/div[3]/ol/li[3]/a/span").click()
输出:

太棒了!谢谢请您解释一下这是什么意思(驱动程序。执行_脚本(“参数[0]。单击();”)意思是?由于您的元素隐藏在页面上,普通selenium python绑定无法单击它。因此我们使用Javascript定位元素并单击它。至于与web元素交互,我们的普通脚本首先通过绑定转换为Javascript,然后按照指示执行操作。有时,当它无法执行所需操作时我们可以使用直接Javascript来实现这一点。
driver.get('https://www.clinicalkey.com/#!/browse/book/3-s2.0-C2016100010X')
# look for "login" and click
loginclick=WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//*[@id='header']/div[3]/ol/li[3]/a/span")))
driver.execute_script("arguments[0].click();", loginclick)