Python:Webdriver不能与css_selector一起使用

时间:2018-02-05 01:45:58

标签: python selenium webdriver

我尝试使用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&#39; 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,有人建议我使用&#34; find_elements_by_link_text&#34;它有效,但它只适用于那个。我仍然想知道如何解决这个问题。谢谢!

更新:

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

错误:

TimeoutException: Message: 

2 个答案:

答案 0 :(得分:1)

虽然您已经接受了答案,但我希望您了解问题的根本原因

有两个具有相同类名的链接:第一个是隐藏的。您可以使用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()

请注意,按链接文字搜索会跳过隐藏链接并仅处理可见链接

答案 1 :(得分:0)

我使用了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()