AWS Canary Selenium 用户代理字符串

问题描述 投票:0回答:3

我希望在 AWS Selenium Canary 中设置自定义用户代理,但不知何故我尝试做的事情不起作用

根据此文档,我应该能够更改/附加字符串到浏览器的用户代理标头...

add_user_agent(user_agent_str)
Appends the value of user_agent_str to the browser's user agent header. You must assign user_agent_str before creating the browser instance.

Example:

synthetics_webdriver.add_user_agent('MyApp-1.0')

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html

这是我的示例代码

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.common.keys import Keys
import selenium.common.exceptions
from aws_synthetics.selenium import synthetics_webdriver
from aws_synthetics.common import synthetics_logger as logger
from aws_synthetics.common import synthetics_configuration


async def main():
    synthetics_configuration.set_config(
        {
            "screenshot_on_step_start": False,
            "screenshot_on_step_success": True,
            "screenshot_on_step_failure": True
        }
    )

    synthetics_webdriver.add_user_agent('My User Agent String')
    driver = synthetics_webdriver.Chrome()
        
    driver.get('myurl.com')
    user_agent = driver.execute_script('return navigator.userAgent')
    # should be/contain 'My User Agent String' but instead looks like 'CloudWatchSynthetics-arn'
    logger.info('This is the user agent string: {}'.format(user_agent))
    
    # selenium python tests

async def handler(event, context):
   return await main()

我已经做了很多调试,确保该方法存在,将该方法移动到文件顶部,但我没有运气让它工作

任何帮助将不胜感激,提前致谢。

python amazon-web-services selenium amazon-cloudwatch
3个回答
1
投票

据我所知,您需要首先创建一个对象来执行

add_user_agent
方法并保存该状态。

我没有环境,请尝试一下,并在评论中告诉我结果。

    syn_wdriver = synthetics_webdriver
    # syn_wdriver = synthetics_webdriver() # try this one if above does not work, i'm not sure about the syn_webdriver object
    syn_wdriver.add_user_agent('My User Agent String')
    driver = syn_wdriver.Chrome()

或者:

    driver = synthetics_webdriver.add_user_agent('My User Agent String').Chrome()

0
投票

我再次深入研究自己的代码,意识到我犯了一个简单的错误

这是我的结构

def myfunction():
    # my selenium test

myfunction()

但是,当我这样做时,由于某种原因,add_user_agent 函数不会使用字符串注入浏览器用户代理标头

当我将代码更改为这个时

def myfunction():
    # selenium tests
webdriver.execute_step('StepName', myfunction)

效果很好...


0
投票

我确实尝试了 syn_wdriver.add_user_agent('My User Agent String') 但在 syn-python-selenium 2.0 以上的版本中没有成功。

最后,找到了以下与 syn-python-selenium-4.1 一起使用的解决方案。

虽然我没有尝试过所有其他版本的 syn-python-selenium,但你可以尝试类似的方法。

from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver

# Initialize the WebDriver
browser = syn_webdriver.Chrome()

# Inject custom User-Agent (use a method compatible with AWS Synthetics)
browser.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": "MyBot/1.0 (compatible; Mozilla/5.0; Apache-HttpClient +http://www.example.com)"})
© www.soinside.com 2019 - 2024. All rights reserved.