Selenium 学习笔记
有用的链接
- selenium 官网: https://www.selenium.dev/
- Chromedriver 下载链接: https://chromedriver.chromium.org/
- webDriver 的语法: https://www.selenium.dev/documentation/zh-cn/webdriver/
- webdriver cookie 的代码使用: https://www.selenium.dev/documentation/zh-cn/support_packages/working_with_cookies/
环境: Mac OS, Java
安装
- maven install selenium
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
java
- chromeDriver install
- 下载 WebDriver 二进制文件: https://chromedriver.chromium.org/
- 系统 PATH 环境变量:
export PATH=$PATH:/opt/WebDriver/bin >> ~/.profile
, 使用 chromedriver 命令检测是否安装成功
- chrome debug
- 找到 google chrome 存放的位置, 再配置环境变量
-
Google\ Chrome --remote-debugging-port=9222
使用这个命令查看, 是否配置好. Google Chrome 之间是空格, 命令行时,不要忘记添加反斜杠
代码编写
获得页面
driver.get(String url)
public static void setup(){
System.setProperty("webdriver.chrome.driver", "/Users/xhou/WebDriver/bin/chromedriver");
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://work.weixin.qq.com/wework_admin/frame");
}
get 代码如下:
浏览器页面复用
- 在浏览器全部关闭的情况下, 打开 debug 模式:
Google\ Chrome --remote-debugging-port=9222
- 在代码中作如下编写
cookie 使用
- 文档: https://www.selenium.dev/documentation/zh-cn/support_packages/working_with_cookies/
-
保存 cookie
- 打开页面;
- 扫码/账号登录
- 使用浏览器复用技术, 在同一个浏览器加载页面,在这一步, webdriver 里才获取了登录后的 cookie
- 把 cookie 存入文档,或变量. 现在的代码是存入文档
-
设置 cookie
- 打开页面
- 从文档里读出 cookie, 再设置到 webDriver 中
- 可以看到浏览器自动登录了
读写代码总结
- FileReader & BufferedReader
- 区别: 是否耗费 IO
- Buffered 使用缓冲区的, FileReader 是一个字节一个字节读, 很耗费 IO, 性能差; BufferedReader 是放入缓冲区, 再从缓冲区读取, 性能好
- FileWriter & BufferedWriter
- 区别: 是否耗费 IO
- Buffered 使用缓冲区的, 所以 bufferedWriter.write(String s) 后, 一定要使用 bufferedWriter.flush(), 不然数据不会写进文档
- 关于 flush() 的加强说明, 如果没有调用 bufferedWriter.close() 方法, 需要使用 flush() 才能写入数据; 如果使用 close() 方法, 不需要添加 flush(), 因为 close() 里包含了 flush() 方法
- FileReader/FileReader/FileWriter/BufferedWriter 一定要记得 close()
String.split(regex,limit) 用法
案例: String date = "date:Wed Jan 10 10:43:36 CST 2012 "
我想取 date 后面的内容: date.split[":",2]
参考资料: https://www.runoob.com/java/java-date-time.html
Date dateValue = new Date()
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
date = simpleDateFormat.parse(dateValue);
踩坑记录
selenium Driver/webDriver 版本不一致, 导致排查不到错误原因.确保版本一致