如何使用Selenium和Python更改useragent中显示的操作系统信息



我正在构建一个机器人,它将根据我选择的随机用户代理来更改它的外观。我从用户代理列表中提取,根据所选的代理,我更改网络驱动程序的功能,然后启动它

不管我在用什么https://ipleak.net/测试,无论我运行了多少次这个代码,我的真实操作系统仍然显示出来(而不是所谓的伪造版本(。下面的相关代码,仅供参考真正的OS=MacIntel

desired_caps = DesiredCapabilities.CHROME.copy()
desired_caps['platform'] = user_agent_os
browser = webdriver.Chrome(options=options, desired_capabilities=desired_caps)
browser.get("https://ipleak.net/")

user_agent_os的可能值="ios"、"windows"、"andriod"、"---"、"symbian"、"macos"、"linux"和其他一些值。每次程序运行时,该值都是随机的。

平台属性可以从WebDriver导航器中提取。

您可以在我的windows-10系统上使用以下代码行提取navigator.platform的值:

  • 代码块:

    print("platform: "+driver.execute_script("return navigator.platform;"))
    
  • 控制台输出:

    platform: Win32
    

Navigator平台属性的可能值为:

  • Mac68K
  • MacPPC
  • MacIntel
  • Linux i686
  • Linux armv7l
  • Win32
  • Win16
  • WinCE
  • SunOS
  • HP-UX

另一方面,UserAgent(即navigator.userAgent(确实包含如下操作系统信息:

  • 代码块:

    print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
    
  • 控制台输出:

    userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
    

解决方案

在UserAgent中更改平台信息的唯一方法是使用Python的fake_useragent模块旋转UserAgent

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
options = Options()
ua = UserAgent()
options.add_argument(f'user-agent={ua.random}')
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:WebDriverschromedriver.exe')
print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
driver.quit()

连续执行3次的结果如下:

  1. 第一次执行:

    userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0
    
  2. 第二次执行:

    userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko
    
  3. 第三次执行:

    userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
    

Firefox

from selenium import webdriver
from fake_useragent import UserAgent
useragent = UserAgent()
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", useragent.random)
driver = webdriver.Firefox(firefox_profile=profile, executable_path=r'C:WebDrivers\geckodriver.exe')
print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
driver.quit()

连续执行3次的结果如下:

  1. 第一次执行:

    userAgent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
    
  2. 第二次执行:

    userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
    
  3. 第三次执行:

    userAgent: Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36
    

tl;dr

您可以在中找到一些关于动态更改用户代理的相关讨论

  • 如何使用Selenium和Python更改用户代理
  • 如何使用通过webdriver_manager安装的ChromeDriver更改Google Chrome UserAgent

最新更新