我正在尝试使用AWS自动化一些过程,并且需要使用我正在使用的API对自己进行身份验证。问题是,它的速度太慢了。我正在使用selenium无头chrome浏览器连接到页面,填写我需要的信息并提交表单(根据其他来源,我发现TD Ameritrade API只接受浏览器路径,所以没有办法只处理请求,如果你知道其他情况,那也太好了)。在页面上查找元素大约需要20秒,发送键可能需要整整一分钟,并尝试在5分钟后提交超时的表单。这是我的selenium实现中的一个问题,还是与AWS或我连接的API有关?我的代码如下所示,错误如下:
oauth = OAuth2Session(client_code, redirect_uri=redirect)
authorization_url, state = oauth.authorization_url('https://auth.tdameritrade.com/auth')
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
#chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--user-data-dir=tmp/user-data')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--data-path=tmp/data-path')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--homedir=tmp')
chrome_options.add_argument('--disk-cache-dir=tmp/cache-dir')
chrome_options.add_argument('--no-proxy-server')
chrome_options.add_argument("--proxy-server='direct://'");
chrome_options.add_argument("--proxy-bypass-list=*");
chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
chrome_options.binary_location = "/usr/bin/chromium-browser"
with webdriver.Chrome(options=chrome_options) as driver:
driver.get(authorization_url)
usernamebox = driver.find_element_by_id("username0")
print("found")
usernamebox.send_keys(username)
print("sent")
passbox = driver.find_element_by_id("password")
print("found2")
passbox.send_keys(password)
print("sent2")
passbox.submit()
print("submitted")
错误:
Traceback (most recent call last):
File "/home/ubuntu/environment/td_ameritrade_test.py", line 229, in <module>
td = TDClient()
File "/home/ubuntu/environment/td_ameritrade_test.py", line 172, in __init__
self.oauth_client = self.authenticate_user()
File "/home/ubuntu/environment/td_ameritrade_test.py", line 90, in authenticate_user
passbox.submit()
File "/home/linuxbrew/.linuxbrew/Cellar/python@3.8/3.8.6/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 86, in submit
self._parent.execute_script(
File "/home/linuxbrew/.linuxbrew/Cellar/python@3.8/3.8.6/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 634, in execute_script
return self.execute(command, {
File "/home/linuxbrew/.linuxbrew/Cellar/python@3.8/3.8.6/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/linuxbrew/.linuxbrew/Cellar/python@3.8/3.8.6/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout: Timed out receiving message from renderer: 300.000
(Session info: headless chrome=86.0.4240.75)
任何帮助都将不胜感激!
关于你的用例的更多细节将有助于我们分析程序执行太慢的原因。以下是一些注意事项:
root
用户(管理员
)身份运行Chrome。虽然可以通过在创建WebDriver会话时传递无沙盒标志来解决这个问题,但这种配置不受支持,并且非常不鼓励。您需要将环境配置为以普通用户身份运行Chrome。因此,您可能需要删除--no sandbox
选项
这是沙盒故事的链接。
--Headless
选项时,由于某些限制,您将无法使用--window-size=1280x1696
。您可以在以下网站找到一些相关的详细讨论:
--disable-gpu
是为了在windows平台上启用google-chrome-Headless。这是因为SwiftShader在之前的无头模式下无法在Windows上断言而需要的。这个问题通过Headless解决了:不需要设置--disable-gpu标志您可以在错误中找到相关的详细讨论:gpu_进程_传输_工厂。cc(1007)-丢失用户界面共享上下文:在无头模式下通过ChromeDriver初始化Chrome浏览器时
--隐藏滚动条
,--启用日志记录
,--日志级别=0
,--v=99
,--单进程
,--数据路径=tmp/数据路径
,--磁盘缓存目录=tmp/缓存目录
,--没有代理服务器
,--代理服务器='direct://'
和--代理绕过列表=*
参数,您选择暂时删除这些参数,并根据测试规范将其添加回
你可以在以下网站上找到一些相关的详细讨论:
我一直在尝试使用Firebase Auth执行电话身份验证方法,我已确保遵循所有步骤,添加我的包名称,使用添加SHA Key keytool -list -v -keystore “%USERPROFILE%.android\debug.keystore” -alias androiddebugkey -storepass android -keypass android 然后添加所有的依赖项,并
作为自动化的一部分,我正在尝试使用selenium登录本地托管的网站。该页面提供HTTP基本身份验证弹出窗口,我使用下面的代码发送凭据。然而,在使用调试器并逐步执行代码时,我发现超时异常会反复出现(在旁边标有注释的行)。 我在Chrome浏览器及其相应的Chrome WebDriver上尝试了从79.0到最新的84.0的所有版本,但这种例外似乎在所有情况下都会发生 Windows服务器W2k12虚
在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?
我正在尝试在ec2的两个实例上设置zookeeper。如这里和这里所示。我正在尝试运行zookeeper,但失败了,出现了一个错误:命令:
我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢
jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。