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

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

我想刮一页,收集所有的链接。该页面显示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个链接和初始代码。似乎我没有正确使用硒,我想知道我做错了什么

硒的作用迄今为止。安装了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')]

我试过你的密码。它第一次起作用,后来就没有了。然后我增加了秒数,现在没事了。非常感谢。