最近有需求模拟操作网页或者手机, 也算研究了有一段时间, 就在这儿整理一下结构, 具体细节其他帖子已经有很多了, 就不复述了.

一 : selenium

我个人的一些基础理解, 嫌麻烦可以直接跳过{

selenium本身相当于开了一个服务器, 服务器打开网页, 然后客户端给服务器发送交互来操作网页, 比如打开url, 点击等等. 本身selenium似乎是不局限于python的, 不过python感觉用起来方便一点.

selenium主要有两种用法, 一种是单进程直接作为服务器和客户端. 也就是相当于每次运行都打开一个新网页. 这种方法写起来方便, 但是调试起来其实挺麻烦. 如果有登录之类的操作, 每次调试都要重新登陆. 这里推荐使用第二种remote方式. 这种事分开服务器和客户端, 服务器打开网页, 然后把driver信息dump到文件, 然后客户端读取dump的文件, 载入driver, 这样的话调试的时候只要调试操作就行了, 不需要每次都打开浏览器, 转到url, 登录等等

}

环境准备:

我是win10, python3.7, java15

1:selenium-server-standalone-3.141.59.jar 去selenium官网下类似这种文件名的java包(当然要装个java环境了)

2:python需要安装 selenium 和 pickle(用来dump driver信息)

操作步骤:

1: 运行selenium-server-standalone-3.141.59.jar 这个 java 包, 例如

java -jar c:\tools\selenium-server-standalone-3.141.59.jar

成功的话应该能看到类似

python 网页控制Android python手机网页_python 网页控制Android

这样服务器就在运行了

2:然后用服务器单独生成一个driver, dump下来以备之后客户端反复调用, 这里直接上我测试的时候用的代码. 这里由于我是要监控两个交易所的数据, 所以代码不算是最简化的demo. 不过应该不会影响理解吧

import pickle
import selenium.webdriver

EXECUTOR = 'http://127.0.0.1:4444/wd/hub'
swap_list = ["DFS", "DOP"]
index = input(swap_list)
FILENAME = swap_list[int(index)]
opt = selenium.webdriver.chrome.options.Options()
#因为需要一些chrome的插件, 所以读了user_data
opt.add_argument("--user-data-dir="+r"C:/Users/XXXXXX/AppData/Local/Google/Chrome/User Data_"+FILENAME)

capabilities = opt.to_capabilities()
driver = selenium.webdriver.Remote(command_executor=EXECUTOR, desired_capabilities=capabilities)
fp = open(FILENAME, 'wb')
driver.set_window_size(1000, 3500)
if FILENAME == "DOP":
    driver.get('https://dolphinswap.io/market/7')
if FILENAME == "DFS":
    driver.get('https://apps.defis.network/market-list')
#把driver信息dump到文件
pickle.dump(driver, fp)

运行之后, 应该就会产生一个包含刚才生成的chrome浏览器的driver的信息的文件, 名为FILENAME(这里可以自己改)
3:客户端每次运行的时候读之前dump的driver信息, 之后就可以直接接着操作浏览器页面了
例如:

import pickle
FILENAME = 'DFS'
driver = pickle.load(open(FILENAME, 'rb'))
driver.refresh()

如无意外可以看到页面刷新, 之后操作driver就和原来一样就行

最后提一点初学操作比较容易出现的问题:
1:定位不到元素:
可能是因为html结构是动态生成的, 这里建议直接在浏览器查看器找到你要定位的元素, 然后右键, 复制xpath. 定位的时候直接用
driver.find_element_by_xpath("(刚复制的xpath)").click()
如果还找不到, 可能要看看是不是在浏览器另一个窗口或者一个页面有iframe等等
2:插件操作:
插件一般很可能是打开了另一个窗口, 想操作插件可以直接切换到新窗口
driver.switch_to.window(driver.window_handles[0])
来按照页面正常操作, 操作完切回来就行
至于如何触发点击打开插件, 这个当时研究了一下好像不好搞, 有帖子说直接下插件源码自己调之类的, 嫌麻烦就没搞这么多了

二: uiautomator
现在很多应用都往手机上走, 可能手机的功能比PC网页端还全, 所以最好能直接操作手机操作. uiautomator原理应该和selenium差不多, 都是服务器管理网页, 客户端发请求操作网页, 只不过现在整个手机相当于一个网页
环境准备:
我还是win10, python3.7, uiautomator2
1:adb, 这个是个安卓的测试软件吧, 可以在电脑上管理安卓手机之类的?
2:python里面安装 uiautomator2
3:雷电模拟器
虽然可以直接连真机, 但是毕竟不是很方便, 所以最好用模拟器实现. 找了一圈似乎就雷电模拟器有桥接功能. 或者就直接安装android官方那个, 不过我也不是为了写安卓app, 图方便就用这模拟器了
操作步骤:
这方面相关的帖子很多, 我就点到为止了
1: adb devices
查看是否识别到了设备
2: python -m uiautomator2 init
给设备装ATX, 相当于服务器
3: python -m weditor
可以打开一个模拟页面, 方便定位元素
然后

import uiautomator2 as u2
driver = u2.connect('192.168.50.99')#地址可以在设备上的ATX里面查看
driver.drag(0.202, 0.679, 0.9, 0.679, 0.1)#然后操作driver就行,具体接口可以看相关文档

总结:
总体来说还是selenium操作网页更流畅, uiautomator可能因为我的测试手机和模拟器配置都比较低, 跑起来卡卡的. 另外uiautomator好像也可以操作IOS系统?如果可以就可以各种挂机玩游戏了, 哈哈
希望本帖能帮到想做自动化的朋友们, 能让你们少走点弯路就不枉我留贴了
如果细节有问题可以私聊, 看到的话尽量回答