Python 当隐式等待不执行时,使用find_element_by_link_text查找_element';不行?

Python 当隐式等待不执行时,使用find_element_by_link_text查找_element';不行?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,python和Selenium以及编程方面的新知识 我正在尝试自动化selenium以点击特定链接。在本例中,我希望它点击与链接文本“B”关联的链接: 我添加了一些等待条件,因为我认为问题可能是渲染问题,但它们没有帮助 我得到以下错误: Traceback (most recent call last): File "C:\Python27\programs\selenium commands.py", line 50, in <module> get_single_li

python和Selenium以及编程方面的新知识

我正在尝试自动化selenium以点击特定链接。在本例中,我希望它点击与链接文本“B”关联的链接:

我添加了一些等待条件,因为我认为问题可能是渲染问题,但它们没有帮助

我得到以下错误:

Traceback (most recent call last):
  File "C:\Python27\programs\selenium commands.py", line 50, in <module>
    get_single_link_using_find_elements_by_link_name(url, link_name)
  File "C:\Python27\programs\selenium commands.py", line 47, in get_single_link_using_find_elements_by_link_name
    element = driver.find_element_by_link_text(link_name)
  File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 237, in find_element_by_link_text
    return self.find_element(by=By.LINK_TEXT, value=link_text)
  File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 671, in find_element
    {'using': by, 'value': value})['value']
  File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 156, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 147, in check_response
    raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"B"}'
回溯(最近一次呼叫最后一次):
文件“C:\Python27\programs\selenium commands.py”,第50行,在
通过链接名(url,链接名)使用查找元素获取单个链接
文件“C:\Python27\programs\selenium commands.py”,第47行,在get\U single\U link\u中使用\u find\u elements\u by\u link\u name
元素=驱动程序。通过链接文本(链接名称)查找元素
文件“C:\Python27\lib\site packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py”,第237行,按链接查找元素
返回self.find\u元素(by=by.LINK\u TEXT,value=LINK\u TEXT)
文件“C:\Python27\lib\site packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py”,第671行,在find\u元素中
{'using':by'value':value})['value']
文件“C:\Python27\lib\site packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py”,执行中第156行
self.error\u handler.check\u响应(响应)
文件“C:\Python27\lib\site packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py”,第147行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
NoSuchElementException:消息:u'无法定位元素:{“方法”:“链接文本”,“选择器”:“B”}'
奇怪的是,相同的代码适用于以下url,它是同一站点的一部分:

有什么想法吗

  • 当我传递一个包含字母列表索引的页面时,您的代码对我来说很有用。这意味着您向函数传递了错误的变量——您传递的页面没有名为
    'B'
    的链接,简单明了

  • 您可以通过调用
    driver.find\u element\u by\u id(“IndexControl1”)
    来检查页面上是否有按字母顺序排列的内容
    IndexControl1
    是包含字母内容的
    id
    的名称

    alphabet = driver.find_element_by_id("IndexControl1")
    link_b = alphabet.find_element_by_link_text("B")
    
  • 顺便说一句,如果您已经在页面上选择了“B”,则需要注意其他事项,例如
    http://www.lw.com/people?searchIndex=B&esmode=1
    ,字母B不会显示为链接,在这种情况下,您也会得到一个
    NoTouchElementException


  • 我认为这涵盖了几乎所有可能出现
    无接触异常的情况。祝你好运。

    谢谢你的帮助。我面临的问题是,我知道“B”链接是打开的,因为当我打开源代码时可以看到它。但是,当我在上运行代码时,会出现上面的错误。它在lw.com上不起作用,因为
    通过链接查找元素\u文本
    。click()
    都指定了可见对象<如果文本未在浏览器中呈现,则代码>按链接查找元素\u文本
    将无法返回某些内容。仅仅因为它在源代码中,并不能使它在浏览器中可见。您所指的“B”链接是屏幕顶部启用javascript的“人员查找器”按钮的一部分。您需要使用
    驱动程序。通过id(“PeopleFinderLink”)
    查找元素,然后使用
    驱动程序。通过链接文本(“B”)查找元素。单击()
    以单击所需链接。@NeilAggarwal在有帮助时,向上投票或“接受”答案被认为是礼貌的做法。:)欢迎来到stackoverflow。
    Traceback (most recent call last):
      File "C:\Python27\programs\selenium commands.py", line 50, in <module>
        get_single_link_using_find_elements_by_link_name(url, link_name)
      File "C:\Python27\programs\selenium commands.py", line 47, in get_single_link_using_find_elements_by_link_name
        element = driver.find_element_by_link_text(link_name)
      File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 237, in find_element_by_link_text
        return self.find_element(by=By.LINK_TEXT, value=link_text)
      File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 671, in find_element
        {'using': by, 'value': value})['value']
      File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 156, in execute
        self.error_handler.check_response(response)
      File "C:\Python27\lib\site-packages\selenium-2.25.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 147, in check_response
        raise exception_class(message, screen, stacktrace)
    NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"B"}'
    
    alphabet = driver.find_element_by_id("IndexControl1")
    link_b = alphabet.find_element_by_link_text("B")