Python: Webdriver is not working with css_selector



我试图使用webdriver登录两个网站A和B。但是,当我以" find_element_by_css_selector"的方式使用相同的方式时,b在a工作时无法正常工作。我关闭了JavaScript,发现B的登录部分消失了。

a的html:

<button type="submit" class="width-35 pull-right btn btn-sm btn-primary">
  <i class="ace-icon fa fa-key"></i>
  <span class="bigger-110">Login</span>
</button>

A的代码工作良好:

submit=driver.find_element_by_css_selector(".width-35.pull-right.btn.btn-sm.btn-primary").click()

b的html:

<a class="login-btn" href="javascript:;" data-bind="click: loginSection.loginClick">
  <span class="btn-text">Login</span>
</a>

B的代码不起作用:

submit=driver.find_element_by_css_selector("a.login-btn > span.btn-text").click()

错误说:

ElementNotVisibleException: Message: element not visible

我以前发布了另一个问题,python:find_element_by_css_selector,有人建议我使用" find_elements_by_link_text",并且它起作用,但它仅适用于那个。我仍然想知道如何解决这个问题。谢谢!

更新:

Link=WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='login-btn'][@class='login-btn']"))).click()

错误:

TimeoutException: Message: 

虽然您已经有一个接受的答案,我希望您知道您的问题的根本原因

有2个具有相同类名的链接:第一个链接是隐藏的。您可以使用len(driver.find_elements_by_class_name("login-btn"))进行检查。

这就是为什么您的代码

Link=WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='login-btn'][@class='login-btn']"))).click()

给您TimeOutException-隐藏的元素无法单击

您可以通过指定按钮的索引来修复它:

Link = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "(//a[@class='login-btn'])[2]")))
Link.click()

或通过链接文本使用搜索:

Link = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "確定登入")))
Link.click()

请注意,通过链接文本搜索将跳过隐藏的链接,并仅处理可见的

我使用了time.sleep((延迟方法,它实际上在我的目的中起作用。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.easyauction.com.tw/index.html')
########
# Username and password go here
########
time.sleep(10)
driver.find_element_by_css_selector('#IndexLogin > div > form > a.login-btn > span').click()
driver.quit()

最新更新