【问题标题】:How to display search results using selenium and GeckoDriver?如何使用 selenium 和 GeckoDriver 显示搜索结果?
【发布时间】:2021-06-19 05:02:28
【问题描述】:

我正在尝试使用无头 WebDriver 和 Selenium 打印 DuckDuckgo 的搜索结果。但是,无论我搜索什么 ID 或类名,无论等待加载多长时间,我都无法找到引用搜索结果的 DOM 元素。

代码如下:

opts = Options()
opts.headless = False
browser = Firefox(options=opts)

browser.get('https://duckduckgo.com')
search = browser.find_element_by_id('search_form_input_homepage')
search.send_keys("testing")
search.submit()

# wait for URL to change with 15 seconds timeout
WebDriverWait(browser, 15).until(EC.url_changes(browser.current_url))
print(browser.current_url)

results = WebDriverWait(browser,10)
  .until(EC.presence_of_element_located((By.ID,"links")))

time.sleep(10)
results = browser.find_elements_by_class_name('result results_links_deep highlight_d result--url-above-snippet') # I tried many other ID's and class names
print(results) # prints []

我开始怀疑在 DuckDuckGo 中避免网络抓取存在一些技巧。有人知道吗?

【问题讨论】:

    标签: selenium geckodriver


    【解决方案1】:

    我已经改为使用 cssSelector 然后它可以工作了。我使用 java,而不是 python。

    List<WebElement> elements = driver.findElements(
         By.cssSelector(".result.results_links_deep.highlight_d.result--url-above-snippet"));
    System.out.println(elements.size());
    //10
    

    【讨论】:

    • 不,它在无头模式下不起作用(firefox)自己尝试一下
    • 我仍然使用无头模式得到相同的结果。 image
    • 这很奇怪,我确实看到您收到了10,但相同的代码在我的本地显示为 0。
    • @cruisepandey 我还注意到,包含每个结果的 div 类从标准浏览器中的“results js-results”变为“results js-invisible” m 使用无头 geckodriver
    • @lucasnguyen17 该代码适用于 css 选择器。谢谢!你知道为什么它不能以其他方式工作吗?
    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多