文章目录
安装Chromdriver
Mac
http://chroim-edriver.store.googleapia.com/index.html 选择对应的操作系统与谷歌浏览器版本的压缩包.Mac系统解压放入到/usr/local/bin 目录下
Python
demo
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
class JDSkuSpider():
def execute(self):
self.open_browser()
self.browser.get("{自定义Url}")
time.sleep(1)
self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(2)
self.parse_page()
pass
# 打开浏览器
def open_browser(self):
options = webdriver.ChromeOptions()
options.add_argument('headless') # 设置driver的参数为 无头模式
self.browser = webdriver.Chrome(options=options) # 打开浏览器
self.browser.implicitly_wait(1) #等待时间
self.wait = WebDriverWait(self.browser, 1)
def parse_page(self):
price_element = self.browser.find_element_by_class_name("price,J-p-4505438")
# 价格
print("--- 爬取价格 --")
price = price_element.text
print(price)
# img_arr = self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//ul[@class="lh"]')))
lis = self.browser.find_elements_by_xpath('//ul[@class="lh"]/li')
print("--- 爬取图片 --")
for li in lis:
# 图片 需要下载吗
print(li.find_element_by_tag_name('img').get_attribute("src"))
print("--- 爬取重量 --")
weight = self.browser.find_element_by_xpath('//div[@id="summary-weight"]/div[2]')
print(weight.text)
print("---爬取类别---")
categories = self.browser.find_elements_by_xpath('//div[@id="choose-attr-1"]/div[2]/div')
for category in categories:
sku = category.get_attribute("data-sku")
value = category.get_attribute("data-value")
print("sku编号:" + sku + ",类别:" + value)
print("--- 爬取净含量 --- ")
net_weights = self.browser.find_elements_by_xpath('//div[@id="choose-attr-2"]/div[2]/div')
for net_weight in net_weights:
sku = net_weight.get_attribute("data-sku")
value = net_weight.get_attribute("data-value")
print("sku编号:" + sku + ",净含量:" + value)
# print(weight.text)
# print(len(lis.find_element_by_tag_name("li")))
# print(lis.find_element_by_tag_name('img').get_attribute("src"))
# img_arr = [item.get_ for item in img_arr]
# for img in img_arr:
# print(img)
# print(img.find_elemen_by_tag_name('img').get_attribute("src"))
# 价格
# print(price)
if __name__ == '__main__':
spider = JDSkuSpider()
spider.execute()
常用API
获取单个节点
- find_element_by_class_name 根据class获取element节点
- find_element_by_xpath 根据xml 路径获取element节点
- find_element_by_tag_name 根据标签获取element节点
- find_element_by_id 根据id获取element节点
获取节点下的列表
- find_elements_by_class_name 根据class获取element节点
- find_elements_by_xpath 根据xml 路径获取element节点
- find_elements_by_tag_name 根据标签获取element节点
- find_elements_by_id 根据id获取element节点
获取节点的属性、值信息
element.get_attribute(“data-sku”) 获取标签属性 data-sku 的值
element.text 获取标签的内容
Java
引入pom依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
demo
package com.zimin.wiki.selenium;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
/**
* @author zimin
* @since 2021/9/24 5:23 下午
*/
public class SeleniumTest {
public static void main(String[] args) {
ChromeDriver chromeDriver = new ChromeDriver();
//打开网站
chromeDriver.get("{解析的URL}");
System.out.println("---- 获取商品价格 ----");
WebElement elementByClassName = chromeDriver.findElementByClassName("J-p-4505438");
System.out.println(elementByClassName.getText());
System.out.println("---- 获取商品图片 ----");
List<WebElement> elementsByXPath = chromeDriver.findElementsByXPath("//ul[@class='lh']/li");
for (WebElement webElement : elementsByXPath) {
System.out.println(webElement.findElement(By.tagName("img")).getAttribute("src").replace("n5", "n1"));
}
System.out.println("---- 获取商品重量 ----");
List<WebElement> weight = chromeDriver.findElementsByXPath("//ul[@id='summary-weight']/div[2]");
System.out.println(weight);
System.out.println("---- 获取商品分类 ----");
List<WebElement> categories = chromeDriver.findElementsByXPath("//ul[@id='choose-attr-1']/div[2]/div");
for (WebElement category : categories) {
String sku = category.getAttribute("data-sku");
String value = category.getAttribute("data-value");
System.out.println("sku编号:" + sku + ",类别:" + value);
}
System.out.println("---- 获取商品净含量 ----");
List<WebElement> netWeights = chromeDriver.findElementsByXPath("//div[@id='choose-attr-2']/div[2]/div");
for (WebElement netWeight : netWeights) {
String sku = netWeight.getAttribute("data-sku");
String value = netWeight.getAttribute("data-value");
System.out.println("sku编号:" + sku + ",净含量:" + value);
}
}
}
常用API
获取单个节点
- findElementByClassName 根据class获取element节点
- findElementByXpath 根据xml 路径获取element节点
- findElementByTagName 根据标签获取element节点
- findElementById 根据id获取element节点
获取节点下的列表
- findElementsByClassName 根据class获取element节点
- findElementsByXpath 根据xml 路径获取element节点
- finElementsByTagName 根据标签获取element节点
- finElementsById 根据id获取element节点
获取节点的属性、值信
element.getAttribute(“data-sku”) 获取标签属性 data-sku 的值
element.getText 获取标签的内容