【问题标题】:Selenium with python does not find specific linkSelenium 与 python 没有找到特定的链接
【发布时间】:2021-04-09 23:36:40
【问题描述】:

我希望从通过 javascript 自动生成其内容的网站上抓取特定链接。当我手动检查网站时,我可以轻松找到我想要抓取的链接。您可以在下面看到一个示例。基本上,我想找到一种方法来自动找到

<a href="/bsbe/document/JURE210005412/format/xsl/part/L?oi=5wDyMgzh8g&sourceP=%7B%22source%22%3A%22TL%22%2C%22sort%22%3A%22date%22%7D"...> <li class="toolpane_list_entry toolpane_list_entry_right">之后的标签

例子:

<li class="toolpane_list_entry toolpane_list_entry_right">
   <a href="/bsbe/document/JURE210005412/format/xsl/part/L?oi=5wDyMgzh8g&amp;sourceP=%7B%22source%22%3A%22TL%22%2C%22sort%22%3A%22date%22%7D" class="button bnext__button button--next bnext__button--next" id="docnextbuttontop" aria-disabled="false" aria-controls="id_docPanelContainer">
      <span>
         <span>Nächster Treffer</span>
         <em class="sicon" aria-hidden="true">
            <svg focusable="false" class="svg-icon-chevron_right" height="100%" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg">
               <path fill="currentColor" d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path>
               <path d="M0 0h24v24H0z" fill="none"></path>
            </svg>
         </em>
      </span>
   </a>

但是,当我使用 selenium 和 python 加载此页面时,我正在寻找的 &lt;a href...&gt; 不存在(见下文)。

<li class="toolpane_list_entry toolpane_list_entry_right">
   <span class="button bnext__button button--nextDisabled bnext__button--nextDisabled">
      <span>Nächster Treffer</span>
      <em aria-hidden="true" class="sicon">
         <svg class="svg-icon-chevron_right" focusable="false" height="100%" viewbox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg">
            <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" fill="currentColor"></path>
            <path d="M0 0h24v24H0z" fill="none"></path>
         </svg>
      </em>
   </span>
</li>

如您所见,整个 标签不存在。

这是我的python代码:

from selenium.webdriver.firefox.options import Options as FirefoxOptions
from bs4 import BeautifulSoup
import os
from selenium import webdriver

options = FirefoxOptions()
options.add_argument("--headless")
firefox_driver = os.getcwd() +"\\geckodriver.exe"
driver = webdriver.Firefox(options=options, executable_path=firefox_driver)
driver.get("https://gesetze.berlin.de/bsbe/document/JURE210005730") 

# returns empty list
driver.find_elements_by_class_name("button bnext__button button--next bnext__button--next")


soup_file=driver.page_source
soup = BeautifulSoup(soup_file)
print(soup.find_all("li", {"class":"toolpane_list_entry toolpane_list_entry_right"}))

您知道可能是什么问题吗?您认为有办法提取链接吗?我可以提供任何其他信息来查找问题吗?

谢谢

【问题讨论】:

  • 你需要包含你的硒代码
  • driver.page_source 获取页面的实际源代码,这意味着在任何 Javascript 运行之前。您需要使用一些 find_elements_xxx 方法来浏览页面的实际 DOM。
  • 嗨蒂姆,我试过了,但它不起作用。我试图通过它的 id 和 class 找到元素,它回来时没有任何东西。事实上,当我列出所有 id 时,它并不在其中。
  • 用简单的语言解释你想在这个页面上找到什么gesetze.berlin.de/bsbe/document/JURE210005730你的问题很难阅读。
  • 你想点击哪个按钮?

标签: python selenium web-scraping


【解决方案1】:

试过了吗?

driver.findElement(By.xpath("//div[contains(@class,'my-class')]"));

在您的情况下,更改 classnametag

driver.findElement(By.xpath("//li[contains(@class,'toolpane_list_entry toolpane_list_entry_right')]"));

【讨论】:

  • 谢谢 Shabari,我尝试通过 driver.find_element(By.XPATH, "//a[@id='docnextbuttontop']") 直接访问链接,但我得到了 NoSuchElementException。当我尝试找到 li 并打印出子元素时,它也不存在,但它显示的结果与我使用 beautfulsoup 得到的结果相同
猜你喜欢
  • 2023-03-24
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多