Css 单击按钮后加载完整的HTML,以使用Selenium加载其他元素
我想刮一页,收集所有的链接。该页面显示30个条目,要查看完整列表,需要单击“全部加载”按钮 我正在使用以下代码:Css 单击按钮后加载完整的HTML,以使用Selenium加载其他元素,css,python-3.x,selenium,web-scraping,beautifulsoup,Css,Python 3.x,Selenium,Web Scraping,Beautifulsoup,我想刮一页,收集所有的链接。该页面显示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&a
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个链接和初始代码。似乎我没有正确使用硒,我想知道我做错了什么
硒的作用迄今为止。安装了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')]
我试过你的密码。它第一次起作用,后来就没有了。然后我增加了秒数,现在没事了。非常感谢。