玩过浏览器的都会了!!你还不会模拟浏览器运行获取想要数据?
Posted 了 凡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩过浏览器的都会了!!你还不会模拟浏览器运行获取想要数据?相关的知识,希望对你有一定的参考价值。
前言
壁纸推荐
博主简介
博主介绍:
– 本人是了凡,意义是希望本人任何时候以善良为先,以人品为重,喜欢了凡四训中的立命之学、改过之法、积善之方、谦德之效四训,更喜欢每日在简书上投稿日更的读书感悟笔名:三月_刘超。专注于 Go Web 后端,辅学Python、Java、算法、前端等领域。微信公众号【了凡银河系】期待你的关注。未来我们一起加油!
文章目录
导包
# coding:utf-8
import time
import pymysql
from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.options import Options
init方法 初始化时间
init 方法 作为如果出现超时先 抓取前端index页面数据然而页面没加载出 出现错误进行抛出回滚加时重新处理 的初始值为60ms 和 5ms
def __init__(self):
a = 60
b = 5
self.results_A_S_F(a, b)
results_A_S_F
第一步 连接数据库
# 连接数据库
connect = pymysql.connect(
host='##', # 数据库地址
port=3306, # 数据库端口
user='root', # 数据库用户名
password='######', # 数据库密码
database='#######', # 数据库表名
charset='utf8', # 编码方式
use_unicode=True)
# 通过cursor执行增删查改
cursor = connect.cursor()
第二步 写入要自动模拟的一个URL地址
url = 'https://wahis.oie.int/#/dashboards/qd-dashboard'
第三步 添加谷歌环境变量的路径
查看谷歌环境版本:chrome://settings/help
具体下载环境变量:https://npm.taobao.org/mirrors/chromedriver/
这里以Linux内的路径为例
# chromedriver已经添加环境变量
driver_Chrome = '/usr/bin/chromedriver'
第四步 配置无界面头文件
# 创建配置文件 因为phantomjs浏览器针对这个网站做了反爬机制所以无法爬取采用谷歌浏览器 而 macos 中chrome浏览器59+版本,Linux中必须57+版本
# 配置对象添加开启无界面模式的命令
# 实例化配置对象
chrome_options = Options()
chrome_options.add_argument('window-size=1920x1080') # 指定浏览器分辨率
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 配置对象添加禁用gpu的命令
chrome_options.add_argument('--disable-gpu')
# 更换ip代理,必须重新启动浏览器
# chrome_options.add_argument('--proxy-server=http://121.41.195.16:3307')
# 更换user-agent
# chrome_options.add_argument('--user-agent=Mozilla/5.0 python37')
第五步 创建浏览器对象 并且加入头文件配置和环境变量
代表头文件参数: chrome_options
环境变量:executable_path
# 创建一个浏览器对象
# self.driver = webdriver.Chrome(executable_path=driver_Chrome) # 有界面浏览器
self.driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=driver_Chrome) # 无界面浏览器
第六步 访问URL地址
# 访问指定的url地址
self.driver.get(url)
第七步 具体逻辑代码实现
time.sleep(a)
one = self.driver.find_element_by_class_name('show')
self.driver.switch_to.frame(one)
# self.driver.save_screenshot("go.png")
self.driver.find_element_by_xpath(
'//*[@id="content"]/div/div[5]/div/article/div[1]/div/div/qv-filterpane/div/div/div/div[2]').click()
time.sleep(b)
self.driver.find_element_by_xpath("//*[text()='African swine fever virus (Inf. with)']").click()
time.sleep(b)
self.driver.find_element_by_class_name('sel-toolbar-confirm').click()
time.sleep(b)
self.driver.find_element_by_xpath(
'//*[@id="content"]/div/div[8]/div/article/div[1]/div/div/qv-filterpane/div/div/div/div[2]').click()
time.sleep(b)
self.driver.find_element_by_class_name('sel-toolbar-icon-toggle').click()
time.sleep(b)
self.driver.find_element_by_xpath("//*[text()='Select all']").click()
time.sleep(b)
self.driver.find_element_by_class_name('sel-toolbar-confirm').click()
time.sleep(b)
self.driver.switch_to.default_content()
self.driver.find_element_by_xpath('/html/body/app-root/div/app-pi/app-pi-qddashboard/div/div/a/button[2]').click()
time.sleep(b)
one = self.driver.find_element_by_class_name('show')
self.driver.switch_to.frame(one)
result = self.driver.find_elements_by_xpath(
'//*[@id="content"]/div/div[1]/div/article/div[1]/div/div/div/div[2]/div/table/tbody/tr/td[3]/div')
results = 0
for i in range(0, len(result)):
a = ''
for j in result[i].text:
if j != ' ':
a += j
results += int(a)
print(results)
第八步 提交数据库 并 关闭浏览器窗口
cursor.execute("""update results SET result_s=(%s) where id=(%s)""", (results, 1))
# 提交数据库
connect.commit()
self.driver.quit()
第九步 异常处理
如果出现问题则做加时间回滚重新自动模拟抓取数据,假设第一次打开浏览器时间加时超过200ms 则判断其他错误 并写入log日志里
except Exception as f:
print(f)
self.driver.quit()
a += 20
b += 5
if a > 200:
with open("loging.txt", 'a', encoding='utf-8') as f:
f.write("\\n")
f.write("resultAfricanSwineFever")
f.close()
else:
self.results_A_S_F(a, b)
所有代码
class resultAfricanSwineFever:
def __init__(self):
a = 60
b = 5
self.results_A_S_F(a, b)
def results_A_S_F(self, a, b):
print(a, b)
try:
# 连接数据库
connect = pymysql.connect(
host='##', # 数据库地址
port=3306, # 数据库端口
user='root', # 数据库用户名
password='######', # 数据库密码
database='#######', # 数据库表名
charset='utf8', # 编码方式
use_unicode=True)
# 通过cursor执行增删查改
cursor = connect.cursor()
url = 'https://wahis.oie.int/#/dashboards/qd-dashboard'
# chromedriver已经添加环境变量
driver_Chrome = '/usr/bin/chromedriver'
# 创建配置文件 因为phantomjs浏览器针对这个网站做了反爬机制所以无法爬取采用谷歌浏览器 而 macos 中chrome浏览器59+版本,Linux中必须57+版本
# 配置对象添加开启无界面模式的命令
# 实例化配置对象
chrome_options = Options()
chrome_options.add_argument('window-size=1920x1080') # 指定浏览器分辨率
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 配置对象添加禁用gpu的命令
chrome_options.add_argument('--disable-gpu')
# 更换ip代理,必须重新启动浏览器
# chrome_options.add_argument('--proxy-server=http://121.41.195.16:3307')
# 更换user-agent
# chrome_options.add_argument('--user-agent=Mozilla/5.0 python37')
# 创建一个浏览器对象
# self.driver = webdriver.Chrome(executable_path=driver_Chrome) # 有界面浏览器
self.driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=driver_Chrome) # 无界面浏览器
# 访问指定的url地址
self.driver.get(url)
time.sleep(a)
one = self.driver.find_element_by_class_name('show')
self.driver.switch_to.frame(one)
# self.driver.save_screenshot("go.png")
self.driver.find_element_by_xpath(
'//*[@id="content"]/div/div[5]/div/article/div[1]/div/div/qv-filterpane/div/div/div/div[2]').click()
time.sleep(b)
self.driver.find_element_by_xpath("//*[text()='African swine fever virus (Inf. with)']").click()
time.sleep(b)
self.driver.find_element_by_class_name('sel-toolbar-confirm').click()
time.sleep(b)
self.driver.find_element_by_xpath(
'//*[@id="content"]/div/div[8]/div/article/div[1]/div/div/qv-filterpane/div/div/div/div[2]').click()
time.sleep(b)
self.driver.find_element_by_class_name('sel-toolbar-icon-toggle').click()
time.sleep(b)
self.driver.find_element_by_xpath("//*[text()='Select all']").click()
time.sleep(b)
self.driver.find_element_by_class_name('sel-toolbar-confirm').click()
time.sleep(b)
self.driver.switch_to.default_content()
self.driver.find_element_by_xpath('/html/body/app-root/div/app-pi/app-pi-qddashboard/div/div/a/button[2]').click()
time.sleep(b)
one = self.driver.find_element_by_class_name('show')
self.driver.switch_to.frame(one)
result = self.driver.find_elements_by_xpath(
'//*[@id="content"]/div/div[1]/div/article/div[1]/div/div/div/div[2]/div/table/tbody/tr/td[3]/div')
results = 0
for i in range(0, len(result)):
a = ''
for j in result[i].text:
if j != ' ':
a += j
results += int(a)
print(results)
cursor.execute("""update results SET result_s=(%s) where id=(%s)""",
(results, 1))
# 提交数据库
connect.commit()
self.driver.quit()
except Exception as f:
print(f)
self.driver.quit()
a += 20
b += 5
if a > 200:
with open("loging.txt", 'a', encoding='utf-8') as f:
f.write("\\n")
f.write("resultAfricanSwineFever")
f.close()
else:
self.results_A_S_F(a, b)
if __name__ == '__main__':
resultAfricanSwineFever1 = resultAfricanSwineFever()
具体逻辑实现或者其他需要交流的请留言哦~
这次就先讲到这里,如果想要了解更多的golang语言或其他领域内容一键三连后序每周持续更新!
以上是关于玩过浏览器的都会了!!你还不会模拟浏览器运行获取想要数据?的主要内容,如果未能解决你的问题,请参考以下文章
学了半年前端,基本的html+css+js都会了,有没有啥好的项目可以当案例做的。