V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
marvincible
V2EX  ›  Python

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

  •  
  •   marvincible · 2022-12-07 12:03:30 +08:00 · 2199 次点击
    这是一个创建于 506 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ```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 运行成功。

    感觉应该是被服务端的某种判断拦截了,有没有什么办法解决呢?
    lookStupiToForce
        1
    lookStupiToForce  
       2022-12-07 13:57:43 +08:00
    第一感觉是你 chrome driver 装的不对
    能否说一下 windows 和 wsl2 的 chrome 以及 driver 分别咋装的
    marvincible
        2
    marvincible  
    OP
       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
        3
    lookStupiToForce  
       2022-12-08 10:08:04 +08:00
    @xpy0313 #2
    因为以前就有 driver 和 chrome 版本不适配的问题

    我也不好下结论,只能建议你试一试重装,毕竟重装包治百病🤣
    https://cloudbytes.dev/snippets/run-selenium-and-chrome-on-wsl2#step-3-install-compatible-chromedriver

    而且你也加了 headless 了,我也看不出还有哪儿还有问题
    lookStupiToForce
        4
    lookStupiToForce  
       2022-12-08 10:09:18 +08:00
    @lookStupiToForce #3 除非你的密码因为不同系统编码不一样,在 wsl2 里被自动转换了一遍
    但我此前没听说过 wsl2 的 python 还有这种操作
    marvincible
        5
    marvincible  
    OP
       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')
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3549 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:39 · PVG 12:39 · LAX 21:39 · JFK 00:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.