2

PythonとSeleniumの初心者であり、そのためのプログラミングです。

特定のリンクに到達するためにセレンを自動化しようとしています。この場合、リンクテキスト「B」に関連付けられたリンクをヒットさせたいと思います。

<li><a href="javascript:__doPostBack(&#39;ctl00$IndexControl1&#39;,&#39;B&#39;)">B</a>

このウェブサイトで:

http://www.lw.com

私はこのコードを使用しています:

def get_single_link_using_find_elements_by_link_name(url, link_name):
    driver = webdriver.Firefox()
    driver.get(url)
    driver.implicitly_wait(10)
    time.sleep(20)
    element = driver.find_element_by_link_text(link_name)
    element.click()

問題はレンダリングの問題である可能性があると思ったので、いくつかの待機条件を追加しましたが、それらは役に立ちませんでした。

次のエラーが発生します。

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"}'

奇妙なことに、同じコードは、同じサイトの一部である次のURLで機能します: http ://www.lw.com/people?searchIndex = A

何か案は?

4

1 に答える 1

1
  1. アルファベット順のリストインデックスを持つページを渡すと、あなたのコードは私のために機能します。これは、間違った変数を関数に渡していることを意味します。渡しているページには'B'、プレーンでシンプルな名前のリンクがありません。

  2. を呼び出すことで、アルファベットがページにあるかどうかを確認できますdriver.find_element_by_id("IndexControl1")。 アルファベットのものが含まれている IndexControl1の名前です。id

    alphabet = driver.find_element_by_id("IndexControl1")
    link_b = alphabet.find_element_by_link_text("B")
    
  3. http://www.lw.com/people?searchIndex=B&esmode=1ちなみに、「B」が選択されたページを既に表示している場合、たとえば、文字Bはリンクとして表示されNoSuchElementExceptionず、この場合もaになってしまうことに注意してください。

私はそれNoSuchElementExceptionがポップアップする可能性のあるほとんどすべてのケースをカバーしていると思います。幸運を。

于 2012-10-16T00:20:50.370 に答える