同一段 Selenium 代码, windows 运行正常, WSL 运行被拦截

2022-12-07 12:03:30 +08:00
 marvincible
```python
from selenium import webdriver
from selenium.webdriver.common.by import By


def run():
options = webdriver.ChromeOptions()
options.add_argument("window-size=1280,960")
options.add_argument('--headless')

driver = webdriver.Chrome(options=options)

driver.get("https://www.4ksj.com/member.php?mod=logging&action=login")

username_box = driver.find_element(by=By.CSS_SELECTOR, value="input[name=username]")
password_box = driver.find_element(by=By.CSS_SELECTOR, value="input[name=password]")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button[name=loginsubmit]")

username_box.send_keys("xxx")
password_box.send_keys("xxx")
submit_button.click()

driver.quit()

run()
```

windows 下运行正常,WSL ubuntu 中运行远程调试发现请求返回“密码错误”
https://imgur.com/QgASihh

将请求 “copy as fetch” 在远程调试 console 运行,失败;拷贝到 windows chrome console 运行成功。

感觉应该是被服务端的某种判断拦截了,有没有什么办法解决呢?
2207 次点击
所在节点    Python
5 条回复
lookStupiToForce
2022-12-07 13:57:43 +08:00
第一感觉是你 chrome driver 装的不对
能否说一下 windows 和 wsl2 的 chrome 以及 driver 分别咋装的
marvincible
2022-12-07 23:51:45 +08:00
@lookStupiToForce 都能正常打开网页了,怎么会是 chrome driver 的问题呢? driver 是 selenium 4.6 以后自动装的,linux 安装 chrome 脚本如下:
```
curl -O https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo apt-key add linux_signing_key.pub
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee -a /etc/apt/sources.list.d/google-chrome.list
sudo apt-get -y update
sudo apt-get -y install google-chrome-stable
```
lookStupiToForce
2022-12-08 10:08:04 +08:00
@xpy0313 #2
因为以前就有 driver 和 chrome 版本不适配的问题
<amp-youtube data-videoid="WnxGF3SLACE" layout="responsive" width="480" height="270"></amp-youtube>
我也不好下结论,只能建议你试一试重装,毕竟重装包治百病🤣
https://cloudbytes.dev/snippets/run-selenium-and-chrome-on-wsl2#step-3-install-compatible-chromedriver

而且你也加了 headless 了,我也看不出还有哪儿还有问题
lookStupiToForce
2022-12-08 10:09:18 +08:00
@lookStupiToForce #3 除非你的密码因为不同系统编码不一样,在 wsl2 里被自动转换了一遍
但我此前没听说过 wsl2 的 python 还有这种操作
marvincible
2022-12-08 18:02:44 +08:00
解决了,把 UA 换一下就行了

options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900744

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX