Python 自动化浏览器工作

版权声明:Hi,I m Debroon【Q:23609099,青睐互动 https://blog.csdn.net/qq_41739364/article/details/87637760

本篇为爬虫辅助,解决一些反爬虫问题~

  • 有的网站登录很复杂,验证码难以破解,比如大名鼎鼎的12306;

  • 有的网站页面交互复杂,所使用的技术难以被爬取,比如,腾讯文档。

  • 还有的网站,对 URL 的加密逻辑很复杂,URL的参数变量找起来费劲;

使用 selenium 可以解决上述问题,ta 是一个强大的 Python 库。

ta 可以用几行代码,控制浏览器,做出自动打开、输入、点击等操作,就像是有一个真正的用户在操作一样。

看视频,录下视频转换到gif,但没激活就有水印呢!写完博客,再找找破解版。

您可以看到,这些都是浏览器自动找到网页、输入账号、密码并自动登录~

from selenium import webdriver # 从 selenium 库中调用 webdriver 模块
import time

driver = webdriver.Chrome()    # 设置引擎为Chrome,真实地打开一个Chrome浏览器
url = 'http://vip.biancheng.net/login.php'
driver.get(url)
time.sleep(1)


teacher = driver.find_element_by_id('username')
teacher.send_keys('Debroon')              # 账号
assistant = driver.find_element_by_name('password')
assistant.send_keys('NoTXnorC1/2(XJ+Z)')  # 密码,不染天下不染尘,半分行迹半分踪--诗句加数学文理结合-->NoTXnorC1/2(XJ+Z)。
time.sleep(0.5)
button = driver.find_element_by_id('submit')
time.sleep(0.5)
button.click()
driver.close()

这是用 selenium 实现爬虫时要用的解析提取数据,实例就是登录一个网站。现在您还不能玩,

selenium的脚本可以控制所有常见浏览器的操作,在使用之前,需要安装浏览器的驱动。


我的是Chrome浏览器就下载Chrome的安装包了,Windows和Mac都有,按说明书下载好。

链接 : https://localprod.pandateacher.com/python-manuscript/crawler-html/chromedriver/ChromeDriver.html


from selenium import webdriver # 从 selenium 库中调用 webdriver 模块
driver = webdriver.Chrome()    # 设置引擎为Chrome,真实地打开一个 Chrome浏览器
driver.close()                 # 关闭浏览器

变量 driver 在这里是一个实例化的浏览器,因此,就是通过这个浏览器打开网页。

url = 'http://vip.biancheng.net/login.php'  # C语言中文网登录界面的地址
driver.get(url)
time.sleep(1)                               # 暂停 1 s

我们登录网站,要输入用户名和密码。自动化也必须登录,模拟人的操作。我们首先找到用户名、密码、登录按钮分别对应的网页元素是哪一个。

这是用户名的,可以通过name 或 id 查找 username

这是密码框的,通过name 或 id 查找 password

这是登录按钮,能使用 id 或者 name 查找 submit

# 找到用户名框框
teacher = driver.find_element_by_id('username')
# 把提取到的位置信息赋值给teacher,然后再用teacher.send_keys()的方法输入你想填到这个空里的文本。

# 找到密码框框
assistant = driver.find_element_by_name('password')
# 找到登录按钮
button = driver.find_element_by_id('submit')

selenium 提取数据的方法有 5 种,是不是觉得有点麻烦,这也没办法因为网页不会有统一的写法。好在 TA 们的前缀是相同的 : find_element_by_ 译, 查找元素通过 --- 与 BeautifulSoup 中的 find 类似

方法 功能说明
find_element_by_tag_name 查找元素通过标签名
find_element_by_class_name 查找元素通过class属性
find_element_by_id 查找元素通过id
find_element_by_name 查找元素通过name属性
find_element_by_link_text 查找元素通过链接文本(元素:超链接)
find_element_by_partial_link_text 查找元素通过部分链接文本(元素超链接)

如果想要提取多个数据,find_element_by_ 要改成 find_elements_by_ , 复数形式,与 BeautifulSoup 中的 find_all 类似。


现在这些框都找到了,接下来是输入和点击。

# .send_keys() # 模拟按键输入,自动填写表单
# .click()     # 点击元素
# .clear()     # 清除元素内容
teacher.send_keys('Debroon')              # 输入账号
assistant.send_keys('NoTXnorC1/2(XJ+Z)')  # 输入密码,不染天下不染尘,半分行迹半分踪--诗句加数学文理结合-->NoTXnorC1/2(XJ+Z)。
button.click()                            # 点击按钮

这些学会了,那么上面的完整代码看懂是没问题了。

另外,还可以把自己电脑中的Chrome浏览器设置为静默模式,也就是说,让浏览器只是在后台运行,并不在电脑中打开它的可视界面。因为在做爬虫时,通常不需要打开浏览器,爬虫的目的是爬到数据,而不是观看浏览器的操作过程,在这种情况下,就可以使用浏览器的静默模式。

# 本地Chrome浏览器的静默默模式设置:
from selenium import  webdriver #从selenium库中调用webdriver模块
from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类

chrome_options = Options() # 实例化Option对象
chrome_options.add_argument('--headless') # 把Chrome浏览器设置为静默模式
driver = webdriver.Chrome(options = chrome_options) # 设置引擎为Chrome,在后台默默运行

完整代码: 

# 本地Chrome浏览器的静默默模式设置:
import time
from selenium import  webdriver #从selenium库中调用webdriver模块
from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类

chrome_options = Options() # 实例化Option对象
chrome_options.add_argument('--headless') # 把Chrome浏览器设置为静默模式
driver = webdriver.Chrome(options = chrome_options) # 设置引擎为Chrome,在后台默默运行

# driver = webdriver.Chrome()   # 如果用上这一句可视化界面会覆盖后台静默模式 #

url = 'http://vip.biancheng.net/login.php'
driver.get(url)
time.sleep(1)

teacher = driver.find_element_by_id('username')
teacher.send_keys('Debroon')              # 账号
assistant = driver.find_element_by_name('password')
assistant.send_keys('NoTXnorC1/2(XJ+Z)')  # 密码   ,不染天下不染尘,半分行迹半分踪  -- 诗句加数学,文理结合 --> NoTXnorC1/2(XJ+Z) 。
time.sleep(0.5)
button = driver.find_element_by_name('submit')
time.sleep(0.5)
button.click()
time.sleep(3)
driver.close()

总结

Selenium是一个强大的网络数据采集工具,它的优势是简单直观,而它当然也有不足。

由于是真实地模拟人操作浏览器,需要等待网页缓冲的时间,在爬取大量数据的时候,速度会比较慢。

分享

除了可用selenium解析与提取数据,还有可使用selenium获取网页,然后交给BeautifulSoup解析和提取。

selenium 有一个获取到渲染完整的网页源代码,driver的一个方法:page_source。

HTML源代码字符串 = driver.page_source

BeautifulSoup把字符串格式的网页源代码解析为BeautifulSoup对象,然后再从中提取数据,那么用BeautifulSoup解析和提取数据。

使用 selenium WebElement类对象 也可以达到 BeautifulSoup 的Tag类的功能。

WebElement类 Tag类 功能说明
WebElement.text Tag.text 提取文字
WebElement.get_attribute() Tag['属性名'] 输入参数: 属性名(可提取的属性值)

.get_attribute() 举例,

定位到上图中标亮的元素,然后提取出type这个属性的值submit。

BeautifulSoup的工作方式


 

猜你喜欢

转载自blog.csdn.net/qq_41739364/article/details/87637760