#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)
```
本文暂时没有评论,来添加一个吧(●'◡'●)