SOCKS使用及びSelenium過検出

14724 ワード

urllibはsocks 5エージェントを携帯する
pip 3 install PySocksのインストール
import socks
import socket
from urllib import request
from urllib.error import URLError

socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 9742)
socket.socket = socks.socksocket
try:
    response = request.urlopen('http://httpbin.org/get')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

requestsはsocks 5エージェントを携帯する
import requests 
proxy = '127.0.0.1:9742'
proxies = {'http': 'socks5://' + proxy, 'https': 'socks5://' + proxy }
try:    
    response = requests.get('http://httpbin.org/', proxies=proxies)    		      		     print(response.text) 
except requests.exceptions.ConnectionError as e:    
    print('Error', e.args)

もう1つの設定方法は、Urllibの方法と同様に、socksモジュールを使用して、上記のようにライブラリをインストールする必要があります.設定方法は以下の通りです.
import requests
import socks
import socket

socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 9742)
socket.socket = socks.socksocket
try:    
    response = requests.get('http://httpbin.org/get')
    print(response.text) 
except requests.exceptions.ConnectionError as e: 
    print('Error', e.args)

このようにSOCKS 5エージェントを設定することもでき、実行結果は全く同じであり、第1の方法に比べてこの方法はグローバル設定であり、場合によっては異なる方法を選択することができる.
Selenium Google追加エージェント
from selenium import webdriver
from selenium.webdriver import ChromeOptions

from selenium import webdriver

# option = webdriver.ChromeOptions()
# option.add_argument('disable-infobars')
# option.add_argument('--headless')
#
# option.add_experimental_option('excludeSwitches', ['enable-automation'])
#
# #      css  
# # prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2}
# # option.add_experimental_option("prefs", prefs)
option = ChromeOptions()
ip = 'ip:port'
option.add_argument(('--proxy-server=' + ip)) 
driver = webdriver.Chrome(options=option)
driver.get(url='https://www.baidu.com')

Selenium火狐追加エージェント

def login(self):

    ua='Mozilla/5.0 (Windows NT {}.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{}.{}.{}.{} Safari/537.36'.format(random.randint(7,10),random.randint(35,75),random.randint(0,9),random.randint(1000,9999),random.randint(100,999))

    options = webdriver.FirefoxOptions()
    options.add_argument('-headless')

    # options.add_experimental_option('excludeSwitches', ['enable-automation'])

    profile = webdriver.FirefoxProfile()

    profile.set_preference('general.useragent.override', ua)

    profile.set_preference('network.proxy.type', 1)

    profile.set_preference('network.proxy.http', ip)
    profile.set_preference('network.proxy.http_port', port)

    profile.set_preference('permissions.default.image', 2)  #   firefox     
    profile.set_preference('browser.migration.version', 9001)  #         
    #   css
    profile.set_preference('permissions.default.stylesheet', 2)

    #   flash
    profile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')

    profile.update_preferences()

    driver = webdriver.Firefox(firefox_options=options, firefox_profile=profile)

    #     
    driver.set_page_load_timeout(800)
    driver.set_script_timeout(800)

    return driver

Selenium GoogleがJS衝突検出を解決
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})


# console.log   ->    window.navigator.webdriver

driver.get('http://exercise.kingname.info')