分享免费的编程资源和教程

网站首页 > 技术教程 正文

编程markdown1-编程控制chrome「原创」

goqiw 2024-09-17 19:31:54 技术教程 24 ℃ 0 评论

#1 客户需求

#1.1 功能性需求

1. 关闭当前所有隐藏界面的chrome浏览器。

2. 修改chrome浏览器的user-agent内容。需要从一个文档中随机调取定义UserAgent。

3. 清除隐藏界面chrome浏览器的缓存(包括:所有cookie、访问记录)。

4. 打开用户可以操作(可以看到chrome界面)的chrome浏览器。

5. 等待用户关闭浏览器。程序每次执行一次流程。

#1.2 时间需求

1. 开发时间24小时。

#1.3 项目评估

- 熟悉selenium库,那么开发简单。

#2 实现思路

#2.1 环境配置

|编号|环境名称|版本|

|---|---|---|

|1|操作系统|windows 7 x64|

|2|python|3.7.5|

|3|selenium|3.141.0|

|4|pandas|0.25.3|

|5|numpy|1.16.1|

#2.2 3种用户使用思路

1. python的各种IDE中直接运行pyOperateChrome文件。

2. 在windows环境中,使用批处理文件运行。

3. 使用pyInstaller对py进行打包。

- 注意需要打包的环境中所有相关库都已经安装。

- pyInstaller会被杀毒软件报毒。

- 感觉最好打包环境的python版本和编程环境相同。

4.1和2都需要配置编译环境。实际在客户的VPS上配置时简直让人崩溃。而且客户也非常不满意这种操作方式(虽然开始的时候客户自信可以忍受环境配置)。最终使用方法3完成。

#3 实现注意事项

- 要求lots_user_agent.csv或者ua.csv文件和pyOperateChrome.py在同一个文件夹中。

- 在VPS是使用中可能碰到的问题及解决步骤(以下均是使用2.2种方法1和2碰到的问题):

1. 运行python.exe。

1. 安装完Python.exe之后,如果发现site-packages中没有Pip的存在。也就是说pip在python安装过程中没有安装成功,那么需要在命令行中输入python -m ensurepip --default-pip,来单独安装pip。

- 可能的原因是VPS对对外访问的端口做出了限制,导致安装pip失败了。

2. 安装vc_redist.x64.exe。

3. 安装过程中一定要勾选PATH的选项(添加到系统环境变量中)。

4. 如果python第三方库安装失败,可能是因为pip没有更新。需要使用命令:python -m pip install --upgrade pip来解决。

2. 在第一步完成之后在windows cmd中输入以下命令:

- pip install selenium

- pip install pandas

- pip install argparse

3. 目前所有的文件都需要放在d:\project目录下。

4. 运行command.bat文件。

5. 其他VPS中chrome的版本必须和当前VPS中chrome的版本一致。

- 使用2.2中方法3只要求ChromeDriver的版本和chrome的版本匹配即可。

#4 源码

```python

import pandas as pd

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

import time

import datetime

import argparse


class ChromeOperate():

def __init__(self, user_agent, waitTime =5, ChromeDriverPath="c:\chromedriver.exe", accessURL = "http://www.ua110.com/", headlessFlag = True):

super().__init__()

self.startURL = accessURL

self.headlessFlag = headlessFlag

self.user_agent = user_agent

self.waitTime = waitTime

self.ChromeDriverPath = ChromeDriverPath

def ChromeOptions(self):

try:

ChromeOptions = Options()

# 设置user-agent。

print("user-agent='"+self.user_agent + "'")

# ChromeOptions.add_argument("user-agent='Mozilla/5.0 (Linux; Android 4.0.3; M031 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'")

ChromeOptions.add_argument("user-agent='"+self.user_agent + "'")

# 启用无痕模式。

ChromeOptions.add_argument('--incognito')

if self.headlessFlag == True:

# 设置为无界面模式。

ChromeOptions.add_argument('--headless')

# ChromeOptions.add_argument('--disable-gpu')

# 为VPS做了修改,全部修改到C盘了,c:\chromedriver.exe。本机上运行的路径应该是D:\Python37\Scripts\chromedriver.exe

browser = webdriver.Chrome(options=ChromeOptions, executable_path=self.ChromeDriverPath)

else:

browser = webdriver.Chrome(options=ChromeOptions, executable_path=self.ChromeDriverPath)

browser.get(self.startURL)

# 休眠10秒。

time.sleep(self.waitTime)

# 清除所有cookie。

cookies = browser.get_cookies()

browser.delete_all_cookies()

finally:

print("quit")

browser.quit()

def ChromeAction(waitTime=600, ChromeDriverPath="c:\chromedriver.exe", StartURL='http://ua110.com', headlessFlag=False):

# 读取大量数据已经没有问题了,需要的是设置编码格式为ANSI。

# user_agents_csv = pd.read_csv('lotof_user_agent.csv', encoding='ANSI')

user_agents_csv = pd.read_csv('ua.csv', header=None, encoding='ANSI',dtype=str)


# 先随机选择出来一行,类型为dataframe。

# 然后将dataframe转换为numpyarray类型,也就是通过values转换的。

# 最后将numpyarray转换为String类型,通过取[0][0]来实现。string作为参数输入。

single_ua = user_agents_csv.sample(1, replace=True,random_state=None,axis=0).values[0][0]

co = ChromeOperate(user_agent=single_ua, waitTime=waitTime,

ChromeDriverPath="c:\chromedriver.exe", headlessFlag=headlessFlag)

co.ChromeOptions()

print("Complete.")


if __name__ == "__main__":

startURL = input("Start URL:").strip()

# headlessFlag = bool(input("Headless Flag:").strip())

# ChromeDriverPath = input("Chrome Driver Path:").strip()

# waitTime = int(input("wait time:").strip())

if (datetime.datetime.now() < datetime.datetime(2020, 8, 8, 10, 24, 36, 910128)):

ChromeAction(startURL=startURL)

# if (not startURL) or (not headlessFlag):

# ChromeAction(waitTime=waitTime)

# else:

# ChromeAction(waitTime, startURL, headlessFlag)

if (not startURL) or (not headlessFlag):

ChromeAction()

else:

ChromeAction(waitTime, startURL, headlessFlag)

```

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表