【问题标题】:IP spoofing with Selenium / Buying shared proxies?使用 Selenium 进行 IP 欺骗/购买共享代理?
【发布时间】:2015-04-08 09:34:30
【问题描述】:

我正在使用 selenium 抓取电子商务网站,因为这些页面是由 Javascipt 加载的。

工作流程如下: 1. 在虚拟显示模式下实例化一个 web 驱动程序,同时发送一个随机用户代理。使用随机用户代理会稍微降低您被检测到的机会。这不会减少被 IP 阻止的机会。 2. 对于每个查询词,说“睡衣”——为该网站创建搜索 url——然后打开该 url。 3. 从 Xpath 中获取相应的文本元素,比如前 10 个产品 ID、它们的价格、产品名称等。 4. 将它们存储在一个文件中 - 我将进一步处理

我有超过 38000 个这样的 url,我需要在页面加载时获取这些 url。 我做了多处理,我很快意识到这个过程失败了,因为一段时间后,网站被阻止了,所以页面加载没有发生。

我如何在 Python 中进行 IP 欺骗,它是否可以与 selenium 一起为您驱动网络,而不是 urllib/urlopen ?

除了通过 xpath 设置实际获取之外,这里是基本代码 - 更具体地说,请参阅 init_driver

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import argparse
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import codecs, urllib, os
import multiprocessing as mp
from my_custom_path import scraping_conf_updated as sf
from fake_useragent import UserAgent

def set_cookies(COOKIES, exp, driver):
    for key, val in COOKIES[exp].items():
        driver.add_cookie({'name': key, 'value': val, 'path': '/', 'secure': False, 'expiry': None})
    return driver


def check_cookies(driver, exp):
    print "printing cookie name & value"
    for cookie in driver.get_cookies():
        if cookie['name'] in COOKIES[exp].keys():
            print cookie['name'], "-->", cookie['value']


def wait_for(driver):
    if conf_key['WAIT_FOR_ID'] != '':
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, conf_key['WAIT_FOR_ID'])))
    elif conf_key['WAIT_FOR_CLASS'] != '':
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS, conf_key['WAIT_FOR_CLASS'])))
    return driver



def init_driver(base_url, url, exp):
    display = Display(visible=0, size=(1024, 768))
    display.start()
    profile = webdriver.FirefoxProfile()
    ua = UserAgent(cache=False)
    profile.set_preference("general.useragent.override",ua.random)
    driver=webdriver.Firefox(profile)
    if len(conf_key['COOKIES'][exp]) != 0:
        driver.get(base_url)
        driver.delete_all_cookies()
        driver = set_cookies(COOKIES, exp, driver)
        check_cookies(driver, exp)
    driver.get(url)
    driver.set_page_load_timeout(300)
    if len(conf_key['POP_UP']['XPATH']) > 0:
        driver = identify_and_close_popup(driver)
    driver = wait_for(driver)
    return driver

【问题讨论】:

  • 嗨,你找到解决方案了吗?
  • 您的问题解决了吗?请您分享解决方案。

标签: python selenium ip multiprocessing spoofing


【解决方案1】:

使用 vpn 提供商或 http 或 socks 代理从目标网站更改明显的原始 IP 地址

【讨论】:

  • 但所有查询似乎仍来自单个 IP 地址,因此会被阻止。
  • 通常有大量(不是一个)来自较大 VPN 服务提供商(例如 expressVPN)的出站网关。虽然它们最终都会被识别出来,但这需要一段时间,同时 vpn 提供商会经常更改其拓扑。它并不完美,但它为您提供了更长的操作时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多