二、python selenium爬虫

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

selenium原为自动化测试工具它会较为真实的模拟用户使用浏览器发送请求在使用时会打开浏览器在屏幕上操作移动其支持主流的浏览器比如chromefirefox或者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可以通过idclass定位还可以通过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的方法
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“二、python selenium爬虫” 的相关文章

UVa 11039 Building designing (模拟)

11039 - Building designingTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=457&page...

增删改查sql语法

sql中增删改查语句 1、“INSERT INTO”语句用于向表格中增加新的行 2、“DELETE”语句用于删除表中的行 3、“Update”语句用于修改表中的数据 4、“SELECT”语句用于从表中选取数据 一、增加语法 INSERT INTO 表名 VALUES (值1,....) 例如...

Vim

vi/vim 中可以使用 :s 命令来替换字符串。该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询。   :s/vivian/sky/ 替换当前行第一个 vivian 为 sky   :s/vivian/sky/g 替换当前行所有 vivian 为...

SQL

select * from tdleft join (select case_id as sup_case_id , count(*) supervise_number from td_kcdc_case_sup_info group by  case_id) supon  su...

nginx的控制命令_nginx的启动命令

Nginx的命令行控制在Linux中,需要使用命令行来控制Nginx服务器的启动与停止、重载配置文件、回滚日志文件、平滑升级等行为。默认情况下,Nginx被安装在目录/usr/local/nginx/中,其二进制文件路径为/usr/local/ng...

彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++

彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++ 前言:这个错误是在第二天尝试重新连接服务器时出现的,在输入服务器密码后一直无法重新连接,弹出...