Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何构造css_选择器以使用Selenium和Python_Python_Selenium_Selenium Webdriver_Css Selectors_Webdriver - Fatal编程技术网

如何构造css_选择器以使用Selenium和Python

如何构造css_选择器以使用Selenium和Python,python,selenium,selenium-webdriver,css-selectors,webdriver,Python,Selenium,Selenium Webdriver,Css Selectors,Webdriver,在SeleniumPython中使用CSS选择器,我试图自动登录到网页 而不是使用: driver.find_element_by_id() 我想练习使用: driver.find_elements_by_css_selector() 所以我把它编码成: userId = driver.find_elements_by_css_selector('input[id = "pass"]') userId.send_keys('blabla78945@gmail.com') 但是它找不到应该输

在SeleniumPython中使用CSS选择器,我试图自动登录到网页

而不是使用:

driver.find_element_by_id()
我想练习使用:

driver.find_elements_by_css_selector()
所以我把它编码成:

userId = driver.find_elements_by_css_selector('input[id = "pass"]')
userId.send_keys('blabla78945@gmail.com')

但是它找不到应该输入的元素。这个案子有什么问题吗?

你离得够近了。如果您能够使用
find\u elements\u by\u id()
在所需元素内发送字符序列,如下所示:

userId = driver.find_element_by_id('pass')
userId.send_keys('blabla78945@gmail.com')
作为一个工具,您可以实现以下相同的功能:

userId = driver.find_element_by_id('pass')
userId.send_keys('blabla78945@gmail.com')
  • 仅将
    id
    属性用作
    css\u选择器

    userId = driver.find_element_by_css_selector("#pass")
    userId.send_keys('blabla78945@gmail.com')
    
    userId = driver.find_element_by_css_selector("input#pass")
    userId.send_keys('blabla78945@gmail.com')       
    
  • 使用标记名
    id
    属性作为
    css\u选择器

    userId = driver.find_element_by_css_selector("#pass")
    userId.send_keys('blabla78945@gmail.com')
    
    userId = driver.find_element_by_css_selector("input#pass")
    userId.send_keys('blabla78945@gmail.com')       
    
注意:您需要使用
find\u element\u by\u css\u selector()
返回所需的webelement,其中as
find\u elements\u by\u css\u selector()
返回一个列表,您无法在列表上调用
send\u keys()


但是,如果您试图在加载新页面后立即访问所需的元素,则理想情况下,您需要引导WebDriverWait使
元素成为可点击的()
,并且您可以使用以下任一选项:

  • 使用
    id
    属性作为
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#pass"))).send_keys("blabla78945@gmail.com")
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#pass"))).send_keys("blabla78945@gmail.com")
    
  • 使用标记名
    id
    属性作为
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#pass"))).send_keys("blabla78945@gmail.com")
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#pass"))).send_keys("blabla78945@gmail.com")
    
  • 注意:您必须添加以下导入:

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

您好,欢迎收看Stackoverflow!我不认为
input[id=“pass”]
是有效的,您可以尝试使用
input[type=password]
并且您需要检查代码是否运行得太快,因为很多时候页面没有时间加载,请参阅browser.wait()在methodsfirst显示真实URL之前-不同的页面可能需要不同的解决方案。始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(而不是评论)。还有其他有用的信息。您应该使用不带s的
find_element
来获取单个元素。现在您可以将
find_elements
与s一起使用,以便获取元素列表,您可能需要
[0]
来处理列表中的第一个元素。可能首先使用
print(userId)
查看您得到了什么。