selenium
它是一款网页浏览器的模拟器,通常用来做网页测试,也可以用来做爬虫
安装selenium
conda install selenium
pip install selenium
同时安装谷歌浏览器和其驱动器,该步可以网上查攻略,不细讲了。
打开
# 1、创建Chrome实例 。
option = webdriver.ChromeOptions()
option.binary_location = r'谷歌浏览器打开路径'#
driver = webdriver.Chrome(options=option)
关闭浏览器
driver.close()
基本设置
# 1、创建Chrome实例 。
option = webdriver.ChromeOptions()
option.binary_location = r'C:.....\Chromium.exe' # binary_location属性指定Chrome启动文件
option.add_argument('--headless') # add_argument属性指定浏览器开启隐式
option.add_argument('--disable-gpu')
option.add_experimental_option('excludeSwitches',['enable-automation']) # 防止被网站识别
driver = webdriver.Chrome(options=option)
打开某个网址并且输出源代码
driver.get("https://blog.csdn.net/weixin_43788986?spm=1000.2115.3001.5343")
print(driver.page_source)
寻找节点
是xpath方法
from selenium import webdriver
from selenium.webdriver.common.by import By
node = driver.find_element(By.XPATH,"") # 寻找单节点
nodes = driver.find_elements(By.XPATH,"") # 寻找多节点
输入和清空输入框
以百度为例,先在浏览器打开百度,然后检查:
可以获取的xpath路径,然后写代码:
driver.get("https://www.baidu.com/")
inp = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input')
inp.send_keys('爬虫学习')
#inp.clear() # 清空搜索框的文字
点击按钮
还是在上个基础上写,同样检查获取百度一下按钮的xpath
driver.get("https://www.baidu.com/")
inp = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input')
inp.send_keys('爬虫学习')
but = driver.find_element(By.XPATH,'//*[@id="su"]')
# but.click() # 不推荐
driver.execute_script("arguments[0].click();", but)
获取子属性,文本
例如:
获取h3中的属性class:
driver.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E7%88%AC%E8%99%AB%E5"
"%AD%A6%E4%B9%A0&fenlei=256&rsv_pq=9717f30200013d1d&rsv_t=8e86C%2BBcvQ12Kl8Ujl9%2FZU6meZGDQ"
"97c7%2FZtsZ1HsJ2nfDVc1EEvjcl6MH8&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=4&rsv_sug1=1&rsv_"
"sug7=100&rsv_btype=i&inputT=174&rsv_sug4=174&rsv_jmp=fail")
h3 = driver.find_element(By.XPATH, '//*[@id="3"]/div/div[1]/h3')
print(h3.get_attribute('class'))
print(h3.text)
切换到新窗口
#保存窗口1
window_1 = driver.current_window_handle
#去新窗口
handles = driver.window_handles
print(handles)
for handle in handles:
if handle!=window_1:
print('Go to new window:',handle)
driver.switch_to.window(handle)