python-3.x - 使用 Selenium 的 headless Chrome - 401 未经授权的访问

标签 python-3.x selenium google-chrome google-chrome-headless

我正在尝试自动执行网页上的一些任务。

为此,我使用 Python、Selenium 和 Google Chrome。

很遗憾,我无法在此处发布该网页,它需要用户名和密码。我已经通过普通的 google chrome 浏览器以用户身份登录网页。

当我运行我的代码并尝试以 headless 模式执行任务时,我收到一条消息“401 - 未经授权:由于凭据无效,访问被拒绝”。我使用 python 中的屏幕截图捕获了这条消息。 Error screenshot 但是,如果我在正常模式(不是 headless 模式)下执行完全相同的步骤,则该网页允许我执行所有操作,因为我已经以用户身份登录。

从错误消息中,我了解到我需要登录。但是,我的问题是:为什么页面在可见模式下允许我执行所有任务,但在 headless 模式下却阻止我执行所有任务?在这两种情况下,我都已经通过普通的 google chrome 浏览器登录了。

有没有办法在 headless 模式下解决这个问题?

请在下面找到我的代码:

import time, datetime, sys, os, openpyxl,logging
from unidecode import unidecode
start_time = time.time()
from datetime import datetime
os.system("cls")
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

CHROME_PATH = 'C:\\Program Files(x86)\\Google\\Chrome\\Application\\chrome.exe'
CHROMEDRIVER_PATH = 'C:\\Users\\'+userID+'\\'+filename+'\\chromedriver.exe'
WINDOW_SIZE = "1920,1080"

chrome_options = Options()  
#chrome_options.add_argument("--headless")  
chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
chrome_options.add_argument("disable-gpu")
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("--disable-notifications")
chrome_options.binary_location = CHROME_PATH

browser = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,chrome_options=chrome_options)
time.sleep(1)
browser.get("*****enter URL here*****")#unfortunately I cannot show the URL here
os.system("cls")
time.sleep(2)

最佳答案

来自 https://github.com/RobCherry/docker-chromedriver#usage

Note: ChromeDriver restricts access to local connections by default. To allow external connections, you can pass in a custom CHROMEDRIVER_WHITELISTED_IPS environment variable. By default, this is set to 127.0.0.1, but this can by any comma separated list of IP addresses. Setting the value as empty will allow all remote connections.

docker run --name chromedriver -p 127.0.0.1::4444 -e CHROMEDRIVER_WHITELISTED_IPS='' robcherry/docker-chromedriver:latest

神奇的是:-e CHROMEDRIVER_WHITELISTED_IPS=''

关于python-3.x - 使用 Selenium 的 headless Chrome - 401 未经授权的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52711352/

相关文章:

java - Selenium Webdriver Java : Element Not Visible Exception

selenium - 功能文件指向不存在的项目

java - 如何使用 selenium 在 google chrome 中获取网络文件?

python - 如何从 docx 创建的表中删除空白列?

python-3.x - GtkSourceView2 等效的 Python3 模块

python - 如何在Python中创建内置 "object()"的对象?

python-3.x - Docker 上的 Jupyter 内核网关中的 RuntimeError

jquery - 尝试确定 Chrome JavaScript 控制台中显示的错误来源

javascript - 强制窗口焦点集中在 Firefox 或 chrome 上

css - Chrome 变换矩阵 iframe 渲染故障