二、python selenium爬虫

selenium原为自动化测试工具,它会较为真实的模拟用户使用浏览器发送请求,在使用时会打开浏览器在屏幕上操作移动,其支持主流的浏览器比如chrome,firefox或者PhantomJS(其不显示浏览器,但可在背后完成一系列操作,其非常适合配合selenium部署在没有界面的服务器上[如果在无界面服务器上使用chrome会报错失败]);selenium相比requests慢许多许多

一.基础

1. 初始

1.安装:pip install selenium

2.下载驱动器(chrome为例子):

https://chromedriver.chromium.org/downloads

注意:下载与自己chrome版本相匹配的,下载上将其放置在本机python.exe同级目录下,一般报错的时候会告诉你路径,你将其放在指定路径即可。由于浏览器的不停更新,对于chromedriver需要及时更新去官网下载新的替换旧的,否则你可能执行时会遇到错误

3.测试

from selenium import webdriver
import time
browser = webdriver.Chrome() # 注意要加双斜杠
url = 'https://www.baidu.com'
# 请求百度
browser.get(url)
time.sleep(2)
# 关闭浏览器
browser.close()
# 退出
browser.quit()

2. 常用属性及方法

  • driver.page_source #driver是选择了浏览器driver后返回的内容 当前标签页浏览器渲染之后的网页源代码
  • driver.current_url 当前标签页的url

  • driver.close() 关闭当前标签页,如果只有一个标签页则关闭整个浏览器
  • driver.quit() 关闭浏览器

  • driver.forward() 页面前进
  • driver.back() 页面后退

  • driver.save_screenshot(img_name) 页面截图

二.操作

1. 获取元素

解释:selenium可以通过id,class定位还可以通过xpath,推荐使用xpath简单快速


find_element_by_id 						(返回一个元素)
find_element_by_class_name 			(根据类名获取元素列表)
find_element_by_name 				(根据标签的name属性值返回包含标签对象元素的列表)
find_element_by_xpath 				(返回一个包含元素的列表)
find_element_by_link_text 			(根据连接文本获取元素列表)
find_element_by_partial_link_text 	(根据链接包含的文本获取元素列表)
find_element_by_tag_name 			(根据标签名获取元素列表)
find_element_by_css_selector 		(根据css选择器来获取元素列表)

2. 元素操作

  • 元素点击:element.click() #element是需要获取到的元素
  • 输入框输入:element.send_keys(data)
  • 清除输入:element.clear()
  • 获取文本内容:element.text(data)
  • 获取属性内容:element.get_attribute("属性名")

3. 链

解释:可能实现更多元素操作

导入:from selenium.webdriver import ActionChains

browser = webdriver.Chrome(executable_path='C:Python\\Python38\\chromedriver.exe')
url = 'https://www.oh.cn/login'
browser.get(url)
button = browser.find_element_by_xpath('/html/body/div/div/div[2]/form[1]/div/div[4]/div/button')

chain = ActionChains(browser) # 实例化链对象
chain.double_click(button) # 链方法 双击

chain.perform()# 执行
  • 元素双击击:chain.double_click(button) #chain是实例化链对象;button是需要获取到的元素

  • 左键点击并保持:chain.click_and_hold(button)

  • 点击-移动:chain.drag_and_drop(source, target)#鼠标左键点击source元素,然后移动到target元素释放鼠标按键

    • 拖拽移动到具体位置:chain.drag_and_drop_by_offset(source, xoffset,yoffset)
  • 按键:

# 举例 ctrl-c
from selenium.webdriver.common.keys import Keys
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
# key_down 按下只能是功能键(Contril,Alt,Shift等),send_keys相当于按了c键,key_up松开了ctrl键

三.其它方法

1.启用无界面模式

options = webdriver.ChromeOptions()#实例化配置对象
options.add_argument("--headless")#配置对象添加开启无界面模式的命令
options.add_argument("--disable-gpu")#配置对象添加禁用gpu的命令
driver = webdriver.Chrome(chrome_options=options,executable_path='C:\\Users\\GaoXX\\AppData\\Local\\Programs\\Python\\Python38\\chromedriver.exe')#实例化带有配置对象的driver对象
url = 'https://www.a.cn'
driver.get(url)
driver.save_screenshot('01.png')

2.获取cookie的方法

  • 获取
driver.get_cookies() # 要是获取不到,需要注意放一个time.sleep让程序等待一下,太快显示不出来
# 后面会介绍更好的等待方式
  • 添加
list =[{'domain': 'www.g.cn', 'httpOnly': True, 'name': 'session', 'path': '/', 'secure': False, 'value': '.'}, {'domain': 'www.g.cn', 'expiry': 1691585195, 'httpOnly': False, 'name': 'remember_token', 'path': '/', 'secure': False, 'value': '55'}] # cookie

# 每次只能添加一个字典
for i in list:
    driver.add_cookie(i)
  • 删除
#删除一条cookie
driver.delete_cookie("CookieName")

# 删除所有的cookie
driver.delete_all_cookies()

3.执行js代码

js = 'alert(123)' # js语句
driver.execute_script(js) # 执行js的方法

你可能感兴趣的:(#,Python爬虫,python,selenium,爬虫)