【问题标题】:Selenium Python - CORS issueSelenium Python - CORS 问题
【发布时间】:2021-05-06 00:37:55
【问题描述】:

我正在尝试使用 Selenium Python 登录我的 dvd.netflix 帐户,但我一直收到不正确的登录信息(尽管输入了正确的用户名和密码),因为身份验证请求由于 cors 错误而失败。

这是我正在使用的代码:

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get('https://dvd.netflix.com/SignIn')

username_input = '//*[@id="email"]'
password_input = '//*[@id="password"]'
login_submit = '//*[@id="signin"]/button'

driver.find_element_by_xpath(username_input).send_keys("justtest0219@gmail.com")
driver.find_element_by_xpath(password_input).send_keys("12345")
driver.find_element_by_xpath(login_submit).click()

我得到的错误:

Access to XMLHttpRequest at 'https://portal.dvd.netflix.com/auth/authenticate' from origin 'https://dvd.netflix.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我也尝试禁用 CORS 检查,但仍然无法登录,如果我尝试使用 WebDriver for Chrome 手动登录,它确实会登录

【问题讨论】:

  • 用您看到的错误更新问题。
  • 完成。错误在控制台日志中。

标签: python selenium selenium-webdriver cors webdriverwait


【解决方案1】:

您可能试图在JavaScript enabled webelements have completely rendered 之前过早调用send_keys()

要将字符序列发送到您需要为element_to_be_clickable() 诱导WebDriverWait 的元素,您可以使用以下任一Locator Strategies

  • 使用XPATH

    driver.get('https://dvd.netflix.com/SignIn')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='email']"))).send_keys("justtest0219@gmail.com")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

如果错误仍然发生,您可能需要添加以下参数:

  • --disable-blink-features=AutomationControlled

所以你的有效代码块将是:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
  
options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get('https://dvd.netflix.com/SignIn')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='email']"))).send_keys("justtest0219@gmail.com")

参考文献

您可以在以下位置找到一些相关的详细讨论:

【讨论】:

  • 仍然遇到同样的错误。如果我使用 selenium 打开登录页面并手动填写表单,它就可以工作。即使我仅使用 selenium 和密码手动填写电子邮件或仅定义 find_element_by_... 我也会收到错误消息。
  • @EmmaGrove 可能由于区域限制,即使手动访问该页面,我也会收到 Page Not Found。因此提供了一些其他参考资料供您参考。
  • 非常感谢您的帮助!该网站在某些国家/地区不可用。如果你有的话就用 USA Vpn 如果你没有的话我可以给你我的
  • @EmmaGrove 当然。让我们在Selenium Chat Room中详细讨论这个问题
  • 你没有回应
【解决方案2】:

我通过使用 firefox geckodriver 而不是 chrome webdriver 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多