我正在尝试自动执行网页上的一些任务。
为此,我正在使用Python,Selenium和Google Chrome。
不幸的是,该网页无法在此处发布,需要用户名和密码。我已经通过普通的Google chrome浏览器以用户身份登录网页。
当我运行代码并尝试以无头模式执行任务时,我收到一条消息“ 401-未经授权:由于凭据无效而拒绝访问”。我使用python中的屏幕截图捕获了此消息。 但是,如果我在正常模式下(不是无头)执行完全相同的步骤,则该网页允许我执行所有操作,因为我已经以用户身份登录。
从错误消息中,我了解到我需要登录。但是,我的问题是:为什么页面在可见模式下可以执行所有任务,而在无头模式下却可以阻止我执行所有任务?在这两种情况下,我都已经通过普通的Google chrome浏览器登录。
在无头模式下是否可以解决此问题?
请在下面找到我的代码:
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)
答案 0 :(得分:0)
来自https://github.com/RobCherry/docker-chromedriver#usage
注意:默认情况下,ChromeDriver限制访问本地连接。要允许外部连接,您可以传入自定义的CHROMEDRIVER_WHITELISTED_IPS环境变量。默认情况下,它设置为127.0.0.1,但是可以用任何逗号分隔的IP地址列表。将该值设置为空将允许所有远程连接。
docker run --name chromedriver -p 127.0.0.1::4444 -e CHROMEDRIVER_WHITELISTED_IPS='' robcherry/docker-chromedriver:latest
魔术是:-e CHROMEDRIVER_WHITELISTED_IPS=''