python selenium参数详解和实现案例

无头模式添加,可以让selenium模拟登录,进入到后台运行
这里以登录打开公司内网下载数据为例,因为涉及私密问题,所以有些地方我们进行覆盖,还请谅解
先不添加无头模式,进行登录,并且下载文件
因为一般selenium使用的是之前版本的浏览器,所以会出现以下情况,需要进行安全认证,所以可以进行直接忽略认证书的错误

一般是在selenium的options进行添加

1

options.add_argument('ignore-certificate-errors')

 

可以看到上面有很多目录点击过来的,要求下载所有的含有日报的excel,需进行小框选择后,才会出现下载按钮

下载一般是直接下载到浏览器默认的地址,这里我们可以进行自主修改,还是在options里进行配置,函数如下

1

2

3

# 设置默认地址

prefs = {'download.default_directory': r'D:\desktop\test_download'}

options.add_experimental_option('prefs', prefs)

完整代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

# 导入所需要的库

import time

import json

import warnings

from selenium import webdriver

from sqlalchemy import create_engine

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

# 运行时terminal里面会出现好多警告,剔除警告

warnings.filterwarnings('ignore')

class Download():

    def __init__(self, url, year, path, chrome, username, password, elements):

        self.year = year

        self.url = url

        self.path = path

        self.chrome = chrome

        self.username = username

        self.password = password

        self.elements = elements

    # 浏览器设置

    def web_sets(self):

        self.options = webdriver.ChromeOptions()

        # 因为我使用的是谷歌浏览器

        self.c_service = Service(f'{self.chrome}')

        self.c_service.command_line_args()

        # 设置后端服务器开始,因为会在后台产生好多服务,为了后面的关闭

        self.c_service.start()

        # 提供默认下载地址

        self.prefs = {'download.default_directory': f'{self.path}'}

        self.options.add_experimental_option('prefs', self.prefs)

        # 设置忽略安全证书所带来的错误

        self.options.add_argument('ignore-certificate-errors')

        # 一些小的设置

        self.options.add_experimental_option('excludeSwitches', ["enable-automation"])

        self.options.add_argument('--np-sanbox')

        self.options.add_argument('--disable-dev-shm-usage')

        # 加属性避免bug

        self.options.add_argument('disable-gpu')

        # 添加无头模式

        self.options.add_argument('headless')

        self.br = webdriver.Chrome(f'{self.chrome}', chrome_options=self.options)

        self.br.implicitly_wait(3)

    def loginPage(self):

        """

        因为我是将所有元素保存在json文件里面,这样就不需要因为find_element而占用好多列

        也为代码节省地方

        这里需要强调的时find_element(By.XPATH)是最新selenium的使用方法,之前的使用会报错

        """

        self.br.get(self.url)

        time.sleep(4)

        self.br.find_element(By.XPATH, f'{self.elements[keys[2]]}').send_keys(self.username)

        time.sleep(2)

        self.br.find_element(By.XPATH, f'{self.elements[keys[3]]}').send_keys(self.password)

        time.sleep(2)

        self.br.find_element(By.XPATH, f'{self.elements[keys[4]]}').click()

        time.sleep(2)

    # 设置跳转到最后页面

    def skipPage(self, url):

        self.br.get(url)

        time.sleep(2)

    # 下载文件

    def download_excel(self):

        # 获取所有ul下面的li标签个数

        ul2 = self.br.find_element(By.XPATH, f'{self.elements[keys[6]]}')

        # 获取li标签数目

        lis2 = ul2.find_elements(By.XPATH, 'li')

        time.sleep(1)

        # 循环li标签

        for j in range(len(lis2)):

            # 因为li的elements都是从1开始,python列表是从0开始,所以要+1

            j+=1

            # 获取li标签的text

            name = self.br.find_element(By.XPATH, f'{self.elements[keys[7]][1]}'%j).get_attribute('title')

            print(f'li标签name: {name}')

            if '日报' in name:

                print(f'第二遍过滤name: {name}')

                li_test = self.br.find_element(By.XPATH, f'{self.elements[keys[8]]}'%j)

                self.br.execute_script('arguments[0].click();',li_test)

                time.sleep(0.5)

                self.br.find_element(By.XPATH, f'{self.elements[keys[9]]}').click()

                time.sleep(0.5)

                li_test2 = self.br.find_element(By.XPATH, f'{self.elements[keys[8]]}'%j)

                time.sleep(1)

                # 设置点击覆盖,以防止报错

                # 因为一直要模拟点击选择文件,然后进行下载文件,防止点击覆盖

                self.br.execute_script("arguments[0].click();", li_test2)

                time.sleep(8)

        time.sleep(10)

        time.sleep(12)

        # 退出浏览器,推出后台服务

        # c_service.stop()对应之前的c_service.stop()

        self.br.quit();self.c_service.stop()

JSON文件

 ul标签的展示

li标签下的title

 

在这里顺便讲下如何获取xpath的绝对路径或者相对路径

 

展示下ul标签相对路径和绝对路径

1

2

xpath: //*[@id="main"]/div[2]/div/div[3]/div[1]/as-dataview/div[2]/ul

full_xpath: /html/body/div[2]/div[1]/div[2]/div/div[1]/div[2]/div/div[3]/div[1]/as-dataview/div[2]/ul

下图是没有c_service.stop(),后台运行服务,不能进行关闭

运行代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

if __name__ == '__main__':

    jsonFile = r'JsonFile\elements.json'

    with open(jsonFile, 'r') as f:

        row_data = json.load(f)

    # 获取所有json的键

    keys = list(row_data.keys())

    # 读取账号和密码

    filename = row_data[keys[0]]

    # 获取账号和密码txt

    with open(filename, 'r') as f:

        data = f.read()

    data1 = data.split('\n')

    url = 'url'

    # chromedriver.exe

    chrome = r'chromedriver.exe'

    username = data1[0]

    password = data1[1]

    path = row_data[keys[1]]

    year = time.gmtime().tm_year

    start = Download(url, year, path, chrome, username, password, row_data)

    start.web_sets()

    start.loginWeb()

    e = row_data[keys[5]]

    start.skipPage(e)

    start.download_excel()

    time.sleep(15)

为了展示出来 取消掉无头模式 这样可以看到浏览器进行下载

 

可以看到只有含有’日报’的数据被下载了,并且任务管理器里面没有刚才出现的Chrome32的服务

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
除了Selenium之外,还有其他一些常用的爬虫框架和工具可以用来实现爬虫案例。其一些包括: 1. BeautifulSoup:BeautifulSoup是一个Python库,用于从HTML或XML文档提取数据。它提供了简单而直观的方式来遍历、搜索和修改文档树。与Selenium不同,BeautifulSoup主要用于解析和提取静态网页的数据。 2. Scrapy:Scrapy是一个级的Python爬虫框架,用于快速、效地抓取和处理网页数据。它提供了强大的功能,如分布式爬虫、自动限速、数据存储和处理等。相比于Selenium,Scrapy更适合用于大规模和效率的网页爬取。 3. Requests:Requests是一个简洁而方便的Python库,用于发送HTTP请求。它提供了简单易用的API,可以轻松地进行网页的获取和数据的提取。与Selenium和Scrapy不同,Requests适用于简单的网页抓取和数据提取任务。 4. PyQuery:PyQuery是一个基于jQuery语法的Python库,用于解析和处理HTML文档。它提供了与jQuery类似的API,可以方便地进行网页的解析和数据的提取。与Selenium和Scrapy相比,PyQuery主要用于对静态网页进行解析和提取。 这些都是常用的爬虫框架和工具,根据不同的需求和任务,可以选择合适的工具来实现爬虫案例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Selenium爬虫实战丨Python爬虫实战系列(8)](https://blog.csdn.net/m0_68103523/article/details/124912564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值