Python Selenium webdriver无法找到元素。错误-消息:元素不可见

Python Selenium webdriver无法找到元素。错误-消息:元素不可见,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我正试图用python中的selenium自动化每天的packt freebook,但似乎无法访问登录表单。 这就是我到现在为止所做的 from selenium import webdriver from selenium.webdriver.common.keys import Keys pkt = "https://www.packtpub.com/packt/offers/free-learning" chromedriver = webdriver.Chrome() chromedri

我正试图用python中的selenium自动化每天的packt freebook,但似乎无法访问登录表单。 这就是我到现在为止所做的

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
pkt = "https://www.packtpub.com/packt/offers/free-learning"
chromedriver = webdriver.Chrome()
chromedriver.get(pkt)
elem = chromedriver.find_element_by_class_name("twelve-days-claim")
elem.click()
elem2 = chromedriver.find_element_by_class_name("login-popup")
elem2.click()
到目前为止,这件事的工作,但之后,我无法找到正确的元素,我曾经尝试的结果是“元素不可见”,当我试图发送密钥时,我尝试了以下任何成功

   1. username = chromedriver.find_element_by_id("login-form-email")
   2.username = chromedriver.find_element_by_id("email")
   3.username = chromedriver.find_element_by_id("email-wrapper")
   4.username = chromedriver.find_element_by_class_name("cf")

我如何做到这一点。我知道并非所有元素在开始时都是可见的,但在
elem2.click()之后,与登录相关的按钮应该在DOM中可见。如果我错了,请纠正我。

我尝试使用CSS选择器,它对我有效。希望它也能帮助你。以下是我所尝试的:

    chromedriver = webdriver.Chrome()
    chromedriver.maximize_window()
    chromedriver.get(pkt)
    elem = chromedriver.find_element_by_class_name("twelve-days-claim")
    elem.click()
    elem2 = chromedriver.find_element_by_class_name("login-popup")
    elem2.click()
    username = chromedriver.find_element_by_css_selector("div[id*='form-login'] [id='login-form-email'] input")
    username.send_keys( "username" )

让我知道这是否解决了问题。

避免元素不可见异常的唯一方法是在代码中显式等待,直到元素可见,无论您是尝试通过Xpath、CSS选择器还是Id查找元素。

我建议您添加等待,直到元素出现。是!谢谢它的工作,不知道为什么我不尝试css选择器。再次感谢。