gpt4 book ai didi

css - 单击按钮以使用 Selenium 加载其他元素后加载完整的 HTML

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:20 24 4
gpt4 key购买 nike

我想抓取一个页面并收集所有链接。该页面显示 30 个条目,要查看完整列表,需要单击“全部加载”按钮。

我正在使用以下代码:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.PhantomJS()
driver.get('http://www.christies.com/lotfinder/searchresults.aspx?&searchfrom=header&lid=1&entry=edgar%20degas&searchtype=p&action=paging&pg=all')

labtn = driver.find_element_by_css_selector('a.load-all')
labtn.click()

elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")
soup = BeautifulSoup(source_code, 'lxml')

url_list = []
for div in soup.find_all(class_ ='image-container'):
for childdiv in div.find_all('a'):
url_list.append(childdiv['href'])
print(url_list)

这是 HTML 标记

<div class="loadAllbtn">
<a class="load-all" id="loadAllUpcomingPast" href="javascript:void(0);">Load all</a>
</div>

我仍然得到最初的 30 个链接和初始代码。看来我没有正确使用 Selenium,想知道我做错了什么。

Selenium 目前有效。安装了 Node JS,我设法截屏并将其保存到文件中。

最佳答案

当您点击“全部加载”时,您会额外请求接收所有元素。您需要等待一段时间服务器响应:

from selenium.webdriver.support.ui import WebDriverWait as wait

driver = webdriver.PhantomJS()
driver.get('http://www.christies.com/lotfinder/searchresults.aspx?&searchfrom=header&lid=1&entry=edgar%20degas&searchtype=p&action=paging&pg=all')

labtn = driver.find_element_by_css_selector('a.load-all')
labtn.click()

wait(driver, 15).until(lambda x: len(driver.find_elements_by_css_selector("div.detailscontainer")) > 30)

以上代码应允许您最多等待 15 秒,直到元素数超过 30。然后你可以用完整的元素列表抓取页面源

附言请注意,您不需要使用这些代码行

elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")

获取页面源。试试看

source_code = driver.page_source

附言此外,您不需要使用 BeautifulSoup 来获取每个元素的链接。你可以这样做

links = [link.get_attribute('href') for link in driver.find_elements_by_css_selector('div.image-container>a')]

关于css - 单击按钮以使用 Selenium 加载其他元素后加载完整的 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44249477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com