如何构造css_选择器以使用Selenium和Python
在SeleniumPython中使用CSS选择器,我试图自动登录到网页 而不是使用:如何构造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') 但是它找不到应该输
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,其中asfind\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
input[id=“pass”]
是有效的,您可以尝试使用input[type=password]
并且您需要检查代码是否运行得太快,因为很多时候页面没有时间加载,请参阅browser.wait()在methodsfirst显示真实URL之前-不同的页面可能需要不同的解决方案。始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(而不是评论)。还有其他有用的信息。您应该使用不带s的find_element
来获取单个元素。现在您可以将find_elements
与s一起使用,以便获取元素列表,您可能需要[0]
来处理列表中的第一个元素。可能首先使用print(userId)
查看您得到了什么。