爬虫 selenium

selenium的基本用法:

前提 下载

下载库:pip install selenium
下载:Chromedriver.exe
下载的方式需要百度:网站 https://jingyan.baidu.com/article/f7ff0bfcdd89ed2e27bb1379.html
注意 下载的时候 64 位和36位是兼容的

设置路径需要
就是你下载放在谷歌浏览器的那个文件夹里
在这里插入图片描述

1:怎么去截图的用法:

图片大小的的设置:
.set_window_size()

from selenium import webdriver

# 1: 创建浏览器驱动对象
driver = webdriver.Chrome()
# 2: 使用浏览器驱动发送请求:
driver.get("http://www.baidu.com")
# 3: 执行浏览器操作:
# 获取百度的截图
driver.save_screenshot("./百度.png")
# 打印浏览器的标题
print(driver.title)
# 4: 退出浏览器
driver.quit()

2:没有界面的浏览器驱动:phantomJS

from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("http://www.baidu.com")
driver.save_screenshot("./百度.png")
driver.quit()

3:模仿百度的搜索:

在这里插入图片描述

4:driver 对象的常用属性的方法:

driver.page_source(获取网页代码)
在这里插入图片描述
8:清除文本框里的东西:driver.clear()

5:driver 对象的获取标签的方法

driver.find_elemet_by_xpath() 这个就是第四个的用法
在这里插入图片描述
需要注意的事项:
在这里插入图片描述

6:对标签元素的操作:

在这里插入图片描述
7:iframe 的注意事项

在这里插入图片描述

在这些页面中有iframe 的话,需要先进入 iframe 页面中才能获取到相应的信息
driver = webdriver.Chrome()
driver.get("原始网站")
next_driver=driver.find_element_by_xpath() # 这个是找到他所在的地方;
driver.switch_to.frame(next_driver) 进入这个网站

然后继续使用 driver 操作

7:用selenium 获取cookie 的 方法:

1:cookies = driver.get_cookies(),获取cookie
2:cookies_dict = {cookie[‘name’]: cookie[‘value’] for cookie in cookies} 将cookie转换成字典格式。
3:driver.delete_cookie(‘BAIDUID_BFESS’),删除指定cookie
4:driver.delete_all_cookies(), 删除所有cookie。

8: 用selenium 获得下拉表单内容

from selenium.webdriver.support.ui import Select
from selenium import webdriver
# 用selenium启动
path=r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
driver.get("要去的网页!")
# 例如: driver.get("https://editor.csdn.net/md?articleId=115282016")
selectBtn=Select(driver.find_element_by_class_name("用name来找相应的标签"))

selectBtn.select_by_index(1) # 获取第一个
selectBtn.select_by_index(2) # 获取第二个
selectBtn.select_by_value("用value 来找下拉表单里面的内容!")
selectBtn.select_by_visible_text("用文本来寻找!")

9.selenium链条

行为链:
有时候在页面中的操作可能要很多步,那么这时候可以用鼠标行为为链类ActionChains 来完成.比如现在要将鼠标一定到某个元素上并执行点击事件,那么示例代码如下:

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
#
path=r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
driver.get("要去的网页!")

inputTag=driver.find_element_by_id("ku")
submitTag=driver.find_element_by_id("su")
# 启动ActionChains
action=ActionChains(driver)
# 鼠标移动到inputTag
action.move_to_element(inputTag)
# 在inpTag输入python
action.send_keys_to_element(inputTag,"python")
# 点击submiTag
action.click(submitTag)
# 执行上面所有的action
action.perform()

还有更多的鼠标相关的操作:
1.click_and_hold(element) :点击但不松开
2.context_click(element) : 右键点击
3.double_click(element) : 双击
更多方法请参考:http://selenium-python.readthedocs.io/api.html

10,切换页面:

1.有时候窗口中有很多子tab页面。这时候肯定是需要进行切换的。selenium提供了一个叫做switch_to_winow来进行切换,具体切换到哪个页面,可以从 driver.window_handles中找到。示例代码如下:

#打开一个新的页面
self.driver.execute_script("window .open( ' "+url+" ')") # url 是网址
#切换到这个新的页面中
self.driver.switch_to_window(self.driver.window_handles[1])

2.一个页面有多个多个页面的时候:
切换iframe
1.由于登录按钮是在iframe上,所以第一步需要把定位器切换到iframe上
2.用switch_to_frame方法切换,此处有id,name属性,可以直接用id,name定位切换

from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://mail.qq.com/")
# 这个直接用id 定位到这个 frame页面
driver.switch_to.frame("login_frame")

3.当iframe 没有id,name的时候:

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://mail.qq.com/")
# 先找到这个位置
frame=driver.find_element_by_class_name("frame")
# 把frame位置穿进去
driver.switch_to.frame(frame)
print(driver.title)
driver.quit()

11.设置代理IP:

有时候频繁爬取一些网页。服务器发现你是爬虫后会封掉你的ip地址。这时候我们可以更改代理IP。更改代理IP,不同的浏览器有不同的实现方式。这里以、Chrome浏览器为例来讲解:

from selenium import webdriver
# 请求代理
options = webdriver.ChromeOptions()
# 代理参数
options.add_argument(" --proxy-server=http://110.73.2.248:8123")
driver_path = r"D:\ProgramAppichromedriverichromedriver.exe"
# 写入代理参数
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get( 'http://httpbin.org/ip')

12. 等待:

1.强制等待:

import time
# 在获取网页的后让他强制等待3秒
time.sleep(3)

2.隐式等待:
如果WebDriver没有在 DOM中找到元素,(就是等待网页加载完成)将继续等待,等待将等待一段时间再查找 DOM,默认的时间是0,如果超时就会报错.

from selenium import driver

driver=webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.implicitly_wait(30)
driver.find_element_by_xpath("//input[@id='u']").send_keys("1234656794")

3.显示等待

使用方法:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)

locator = (By.LINK_TEXT, 'A')  

A就是可以作为判断操作是否完成的标志

WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))  

20:最长等待时间。

0.5:检查间隔时间,每隔0.5秒检查一次操作是否完成。

EC.presence_of_element_located(locator):判断目标元素是否已经成功加载。
from selenium import webdriver
from selenium.webdriver.support.wait import  WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
path=r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
driver.get("https://mail.qq.com/")

try:
    WebDriverWait(driver,30,0.5).until(EC.presence_of_all_elements_located(By.TAG_NAME,"button"))
    print("页面加载成功")
except:
    print("页面加载失败")

注意事项:

转化页面的时候要注意time.sleep(),网页加载需要时间.
记得要退出浏览器

  • driver.close() # 退出当前页面
  • driver.quiet( ) # 退出浏览器
    -driver.cl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值