Python使用瀏覽器模擬訪問頁面之使用ip代理

最近須要使用瀏覽器模擬訪問頁面,同時須要使用不一樣的ip訪問,這個時候就考慮到在使用瀏覽器的同時加上ip代理。python

本篇工做環境爲win10,python3.6.git

Chormegithub

使用Chrome瀏覽器模擬訪問,代碼以下web

import time
from selenium import webdriver

url = "https://www.cnblogs.com/"
driver = webdriver.Chrome("D:/tools/wedriver/chromedriver.exe")
driver.get(url)
time.sleep(2)
print(driver.title)
driver.close()

「D:/tools/wedriver/chromedriver.exe」 是下載的谷歌瀏覽器驅動,下載地址http://npm.taobao.org/mirrors/chromedriver/chrome

chorme使用ip代理比較簡單,使用以下代碼便可npm

import time
from selenium import webdriver

url = "https://www.baidu.com/s?wd=ip"
proxy = "118.190.217.182:80"
chromeOptions = webdriver.ChromeOptions()  # 設置代理
chromeOptions.add_argument("--proxy-server=http://%s" % proxy)
driver = webdriver.Chrome("D:/tools/wedriver/chromedriver.exe", chrome_options=chromeOptions)
driver.get(url)
time.sleep(2)
print(driver.title)
driver.close()

獲得的效果以下圖:瀏覽器

能夠見到百度查詢到的本機ip已經改變。Chrome的這種代理方式中,訪問使用http、https的網站都代理了。cookie

 

Firefoxide

使用Firefox訪問網頁,代碼以下:網站

import time
from selenium import webdriver


url = "https://www.cnblogs.com/"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(2)
print(driver.title)
driver.close()

直接這樣運行會遇到如下錯誤:

selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

須要裝geckodriver,下載地址https://github.com/mozilla/geckodriver/releases。使用方式爲,將對應版本geckodriver.exe放到python.exe的同目錄下。

裝好以後再次運行便可訪問網站。

Firefox的ip代理較爲麻煩,須要設置一些參數,具體以下

import time
from selenium import webdriver


url = "https://www.baidu.com/s?wd=ip"
proxy = "118.190.217.182:80"
ip, port = proxy.split(':')
profile = webdriver.FirefoxProfile()
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.http', ip)    # 設置http代理
profile.set_preference('network.proxy.http_port', int(port))  # 注意端口必定要使用數字而非字符串
profile.set_preference('network.proxy.ssl', ip)     # 設置https代理
profile.set_preference('network.proxy.ssl_port', int(port))
profile.update_preferences()
driver = webdriver.Firefox(profile)
driver.get(url)
time.sleep(2)
print(driver.title)
driver.close()

這裏有兩個注意點:

  1.當須要訪問的網站爲https時,必定要設置network.proxy.ssl參數才行

  2.協議的端口號必定要是整數,不能直接使用字符串,若是拿到的是字符串就使用int轉一下;我以前就是使用了字符串,一直代理不生效,覺得哪裏出了問題,磨了半天。。。

運行以上代碼以後,獲得的頁面和上一張圖相同,這裏再也不貼圖。

總體代碼以下:

# encoding=utf-8
# date: 2018/9/14
__Author__ = "Masako"

import time
from selenium import webdriver


def visit_web(url, proxy):
    # chrome
    # chromeOptions = webdriver.ChromeOptions() # 設置代理
    # chromeOptions.add_argument("--proxy-server=http://%s" % proxy)
    # driver = webdriver.Chrome("D:/tools/wedriver/chromedriver.exe", chrome_options=chromeOptions)

    # firefox
    ip, port = proxy.split(':')
    profile = webdriver.FirefoxProfile()
    profile.set_preference('network.proxy.type', 1)
    profile.set_preference('network.proxy.http', ip)
    profile.set_preference('network.proxy.http_port', int(port))  # 注意端口必定要使用數字而非字符串
    profile.set_preference('network.proxy.ssl', ip)
    profile.set_preference('network.proxy.ssl_port', int(port))
    profile.set_preference("network.proxy.share_proxy_settings", True)
    profile.update_preferences()
    driver = webdriver.Firefox(profile)

    driver.get(url)
    time.sleep(2)
    print(driver.title)
    driver.delete_all_cookies()  # 清除cookies
    driver.close()
    driver.quit()


if __name__ == "__main__":
    url = "https://www.baidu.com/s?wd=ip"
    proxy = "118.190.217.182:80"
    visit_web(url, proxy)
View Code
相關文章
相關標籤/搜索