1.下载Chrome浏览器驱动
查看Chrome浏览器版本:chrome://version/
驱动下载地址:https://chromedriver.storage.googleapis.com/index.html
高版本驱动下载:https://googlechromelabs.github.io/chrome-for-testing/
2.使用selenium
2.1python版
安装:
pip install selenium
示例:
爬取京东首页商品信息
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
# selenium,
# Version: 4.13.0
if __name__ == '__main__':
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
# 不自动关闭浏览器
# option.add_experimental_option("detach", True)
# 设置lang和User-Agent信息,防止反爬虫检测
option.add_argument('lang=zh_CN.UTF-8')
UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.101 Safari/537.36'
option.add_argument('User-Agent=' + UserAgent)
#页面部分内容是动态加载得时候,无头模式默认size为0x0,需要设置最大化窗口并设置windowssize,不然会出现显示不全的问题
option.add_argument('window-size=1920x1080')
# 无界面的浏览器
option.add_argument("headless")
# 指定绝对路径的方式
path = r'E:\Python\chromedriver-win32\chromedriver.exe'
#老版本指定驱动路径
#browser = webdriver.Chrome(executable_path=path)
#如果需要指定路径,但是路径在新版本中被重构到 Service 函数中了
service = Service(executable_path=path)
browser = webdriver.Chrome(options=option,service=service)
browser.get(r'https://www.jd.com/')
# 执行向下滚动操作
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
#等待页面加载,隐式等待
browser.implicitly_wait(5)
#显式等待
# sleep(5)
lis = browser.find_elements(by=By.CSS_SELECTOR,value="li.more2_item.more2_item_good.hover-on")
for li in lis:
str = "商品:"+li.find_element(by=By.CSS_SELECTOR,value=".more2_info_name").text;
str += ",价格:"+li.find_element(by=By.CSS_SELECTOR,value=".more2_info_price_txt").text
print(str)
#页面源码
print(browser.page_source)
# 关闭浏览器
browser.close()
2.2java版
pom.xml:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.0</version>
</dependency>
示例:
爬取京东首页商品信息
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main( String[] args ){
/* 驱动安装的路径 */
System.setProperty("webdriver.chrome.driver", "E:\\Python\\chromedriver-win32\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
/* 无界面的浏览器 */
options.addArguments("headless");
/* 设置lang和User-Agent信息,防止反爬虫检测 */
options.addArguments("lang=zh_CN.UTF-8");
options.addArguments("User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.101 Safari/537.36");
/* 页面部分内容是动态加载得时候,无头模式默认size为0x0,需要设置最大化窗口并设置windowssize,不然会出现显示不全的问题 */
options.addArguments("window-size=1920x1080");
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.jd.com/");
/* 执行向下滚动操作 */
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
/* 隐式等待 */
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
List<WebElement> list = driver.findElements(By.cssSelector("li.more2_item.more2_item_good.hover-on"));
for(int i = 0;i<list.size();i++){
System.out.print("商品:"+list.get(i).findElement(By.cssSelector(".more2_info_name")).getText());
System.out.println(",价格:"+list.get(i).findElement(By.cssSelector(".more2_info_price_txt")).getText());
}
/* 退出WebDriver,关闭所有窗口 */
//driver.quit();
/* 关闭当前窗口或标签页 */
driver.close();
}
}