玩过浏览器的都会了!!你还不会模拟浏览器运行获取想要数据?

前言

壁纸推荐

在这里插入图片描述

如有涉权,请联系我立删

博主简介

博主介绍:

– 本人是了凡,意义是希望本人任何时候以善良为先,以人品为重,喜欢了凡四训中的立命之学、改过之法、积善之方、谦德之效四训,更喜欢每日在简书上投稿日更的读书感悟笔名:三月_刘超。专注于 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语言或其他领域内容一键三连后序每周持续更新!

猜你喜欢

转载自blog.csdn.net/weixin_45765795/article/details/118633676