【问题标题】:Unable to click link using selenium webdriver in python无法在 python 中使用 selenium webdriver 单击链接
【发布时间】:2014-11-06 19:54:50
【问题描述】:

我正在尝试点击如下所示的链接:

<a class="user" href="/Kevin-Rose" action_mousedown="UserLinkClickthrough" id="__w2_L73qRYl_link" 
target="_blank">
         <span class="matched_term">Kevin Rose</span>
</a>

我尝试使用以下代码:

 user = driver.find_element_by_xpath("//a[@class='user'][1]")
 user.click()

我收到以下错误:

ElementNotVisibleException: 消息:u'Element 当前不可见,因此可能无法与'进行交互;堆栈跟踪:

我该如何解决这个问题?

【问题讨论】:

  • 您确定链接可见吗?您能否向我们提供一个正在测试的网站的链接?
  • 你想点击任何特定的链接吗?您可以通过突出显示所需的链接来发布屏幕截图吗?

标签: python python-2.7 selenium selenium-webdriver web-scraping


【解决方案1】:

问题是您正在寻找尚未出现的元素。 Wait 为它。

这是完整的代码,从登录、搜索到关注第一个Kevin Rose链接:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


URL = "http://www.quora.com"
EMAIL = 'your email here'
PASSWORD = 'your password here'

driver = webdriver.Chrome()  # can be webdriver.Firefox() in your case
driver.get(URL)
wait = WebDriverWait(driver, 10)

# login
form = driver.find_element_by_class_name('regular_login')
username = form.find_element_by_name('email')
username.send_keys(EMAIL)

password = form.find_element_by_name('password')
password.send_keys(PASSWORD)

login_button = form.find_element_by_xpath('//input[@type="submit" and @value="Login"]')
login_button.click()

# search
search = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@name='search_form']//input[@name='search_input']")))
search.send_keys('Kevin Rose')
search.send_keys(Keys.ENTER)

# follow the link
link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Kevin Rose")))
link.click()

【讨论】:

  • 效果很好。非常感谢。我是用python shell逐行执行代码,为什么需要等待?
  • @Siddhesh 因为 quora 异步加载页面,在初始数据到来后并非所有元素都在那里。与大量 time.sleep() 调用相比,等待是一种非常简洁的技术。
【解决方案2】:

试试下面的定位器

Xpath : "//span[text()='Kevin Rose']"

cssSelector : "a[href*='Kevin-Rose'] > span"

编辑-I

这是单击个人资料名称 Kevin Rose 的 Xpath

"//div[contains(.,'Profile:') and contains(@class,'photo')]/span/a//span[text()='Kevin Rose']"

【讨论】:

  • 它没有给出任何错误,但我在同一页面上。有多个“凯文·罗斯”的例子可能就是这个原因。当我选择元素时,我的指针在搜索框中。我会尝试使用不同的索引并检查它是否有效,但这又是一项乏味的任务。
  • 你想点击任何特定的链接吗?您可以通过突出显示所需的链接来发布屏幕截图吗?
  • 我已经编辑了我的答案并添加了 xpath。试试看,然后告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2013-10-04
相关资源
最近更新 更多