bugfix> python > 投稿

PythonでSeleniumを使用しています。属性['href']の値を取得して、 '#'と異なることを確認します(はいの場合)
ループ外でない場合は、リンクをクリックしてください。

if not driver.find_element_by_link_text('»'):
        break
            # Open next page
    if driver.find_element_by_xpath("//a[.='»' and not(@href='#')]"):
        link=WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "»")))
        link.click()
    else:
        break

Webページのソースコードは次のとおりです。

<ul class="pagination">
<li class="disabled"><a href="#">«</a></li>
<li class="active"><a class="" rel="nofollow" href="https://www.likibu.com/fr/search/39tuzgbpnycdv7tkj102g?guests=2&amp;destination_id=4094&amp;page=1">1</a></li>
<li><a class="" rel="nofollow" href="https://www.likibu.com/fr/search/39tuzgbpnycdv7tkj102g?guests=2&amp;destination_id=4094&amp;page=37">37</a></li>
<li><a class="" rel="nofollow" href="https://www.likibu.com/fr/search/39tuzgbpnycdv7tkj102g?guests=2&amp;destination_id=4094&amp;page=2">»</a></li>

私のコードは機能せず、次のエラーが表示されます。

raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException

任意の助けをいただければ幸いです。

回答 2 件
  • これを試してもいい

    elems = driver.find_elements_by_xpath("//a[@href]")
    e = []
    for elem in elems:
        val = elem.get_attribute("href")
        if "#" in val:
            print("found # do nothing")
        else:
            print("click this link ",val)
            // click link
            e.append(elem)
    // call click function
    e[0].click()
    
    

  • テキスト付きのリンクをクリックするには» 属性の値を取得する必要はありませんhref、むしろ単に囲むコードのブロック  click() へ   try-catch の要素  次のようにブロックします。

    while True:
        try :
            WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='pagination']//li/a[@rel='nofollow' and contains(.,'»')]"))).click()
            # do your tasks on this particular page
        except :
            print("No more pages left")
            break
    driver.quit()
    
    

あなたの答え