পাইথনে একটি প্রক্সি সহ সেলেনিয়াম ওয়েবড্রাইভার চালাচ্ছি


85

আমি কিছু বেসিক কাজ করার জন্য পাইথনে একটি সেলেনিয়াম ওয়েবড্রাইভার স্ক্রিপ্ট চালানোর চেষ্টা করছি। আমি রোবটটি সেলেনিয়াম আইডিই ইন্টারফেসের মাধ্যমে চালানোর সময় নিখুঁতভাবে কাজ করতে পারি (উদাহরণস্বরূপ: যখন আমার ক্রিয়াকলাপগুলি পুনরায় জানাতে জিইআইআই পাওয়া যায়)। তবে আমি যখন পাইথন স্ক্রিপ্ট হিসাবে কোডটি রফতানি করি এবং কমান্ড লাইন থেকে এটিকে চালিত করার চেষ্টা করি, ফায়ারফক্স ব্রাউজারটি খোলে তবে প্রারম্ভিক URL টি অ্যাক্সেস করতে পারে না (একটি ত্রুটি কমান্ড লাইনে ফিরে আসে এবং প্রোগ্রামটি বন্ধ হয়ে যায়)। আমি যে ওয়েবসাইট ইত্যাদি অ্যাক্সেস করার চেষ্টা করছি তা নির্বিশেষে এটি আমার দ্বারা ঘটছে।

আমি এখানে প্রদর্শনের উদ্দেশ্যে একটি খুব প্রাথমিক কোড অন্তর্ভুক্ত করেছি। আমি মনে করি না যে আমি কোডটির প্রক্সি বিভাগটি সঠিকভাবে অন্তর্ভুক্ত করেছি কারণ ত্রুটিটি ফিরে আসার কারণে প্রক্সিটি উত্পন্ন হয়েছে বলে মনে হচ্ছে।

কোন সাহায্যের অতিশয় প্রশংসা হবে।

নীচের কোডটি কেবলমাত্র www.google.ie খোলার জন্য বোঝানো হয়েছে এবং "সেলেনিয়াম" শব্দটি অনুসন্ধান করা হয়েছে। আমার জন্য এটি একটি ফাঁকা ফায়ারফক্স ব্রাউজার খুলবে এবং থামবে।

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re
from selenium.webdriver.common.proxy import *

class Testrobot2(unittest.TestCase):
    def setUp(self):

        myProxy = "http://149.215.113.110:70"

        proxy = Proxy({
        'proxyType': ProxyType.MANUAL,
        'httpProxy': myProxy,
        'ftpProxy': myProxy,
        'sslProxy': myProxy,
        'noProxy':''})

        self.driver = webdriver.Firefox(proxy=proxy)
        self.driver.implicitly_wait(30)
        self.base_url = "https://www.google.ie/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_robot2(self):
        driver = self.driver
        driver.get(self.base_url + "/#gs_rn=17&gs_ri=psy-ab&suggest=p&cp=6&gs_id=ix&xhr=t&q=selenium&es_nrs=true&pf=p&output=search&sclient=psy-ab&oq=seleni&gs_l=&pbx=1&bav=on.2,or.r_qf.&bvm=bv.47883778,d.ZGU&fp=7c0d9024de9ac6ab&biw=592&bih=665")
        driver.find_element_by_id("gbqfq").clear()
        driver.find_element_by_id("gbqfq").send_keys("selenium")

    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e: return False
        return True

    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException, e: return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

উত্তর:


42

আমার পক্ষে এইভাবে কাজ করে (@ আমের এবং @ ব্যবহারকারী 4642224 কোডের মতো, তবে কিছুটা ছোট):

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

prox = Proxy()
prox.proxy_type = ProxyType.MANUAL
prox.http_proxy = "ip_addr:port"
prox.socks_proxy = "ip_addr:port"
prox.ssl_proxy = "ip_addr:port"

capabilities = webdriver.DesiredCapabilities.CHROME
prox.add_to_capabilities(capabilities)

driver = webdriver.Chrome(desired_capabilities=capabilities)

4
এই কাজ করে, আপনাকে ধন্যবাদ। অদ্ভুত যে ডকস বলে যে আপনাকে দূরবর্তী ড্রাইভার ব্যবহার করা দরকার।
মানস

ড্রাইভার = ওয়েব ড্রাইভার
রিমো

33

কিভাবে ভালো কিছু সম্পর্কে

PROXY = "149.215.113.110:70"

webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
    "httpProxy":PROXY,
    "ftpProxy":PROXY,
    "sslProxy":PROXY,
    "noProxy":None,
    "proxyType":"MANUAL",
    "class":"org.openqa.selenium.Proxy",
    "autodetect":False
}

# you have to use remote, otherwise you'll have to code it yourself in python to 
driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.FIREFOX)

আপনি এটি সম্পর্কে এখানে আরও পড়তে পারেন ।


এই উত্তরটি আমার পক্ষে ভাল কাজ করেছে। যদি অন্য কেউ এজের সাহায্যে এটি করার চেষ্টা করছে, webdriver.DesiredCapabilities.EDGE['proxy']এর কোনও প্রভাব নেই কারণ মাইক্রোসফ্ট এজের বর্তমানে প্রক্সি সার্ভারটি কনফিগার করার জন্য কোনও সেটিংস নেই (প্রক্সির সাথে এজ ব্যবহার করতে আপনাকে অবশ্যই উইন্ডোজ নেটওয়ার্ক সংযোগ সেটিংসের অধীনে প্রক্সিটি কনফিগার করতে হবে) ।
স্টিভ এইচএইচএইচ

4
সম্পূর্ণ বিস্তারিত নথির জন্য, দেখুন: github.com/SleleniumHQ/selenium/wiki/…
লেকিনি

15

আমার সমাধান:

def my_proxy(PROXY_HOST,PROXY_PORT):
        fp = webdriver.FirefoxProfile()
        # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
        print PROXY_PORT
        print PROXY_HOST
        fp.set_preference("network.proxy.type", 1)
        fp.set_preference("network.proxy.http",PROXY_HOST)
        fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
        fp.set_preference("general.useragent.override","whater_useragent")
        fp.update_preferences()
        return webdriver.Firefox(firefox_profile=fp)

তারপরে আপনার কোডটিতে কল করুন:

my_proxy(PROXY_HOST,PROXY_PORT)

এই কোডটি নিয়ে আমার সমস্যা ছিল কারণ আমি একটি বন্দর হিসাবে একটি স্ট্রিং পাস করছিলাম #:

 PROXY_PORT="31280"

এটা গুরুত্বপূর্ণ:

int("31280")

আপনাকে অবশ্যই একটি স্ট্রিংয়ের পরিবর্তে একটি পূর্ণসংখ্যা পাস করতে হবে অথবা আপনার ফায়ারফক্স প্রোফাইলটি কোনও সঠিকভাবে বন্দরে সেট করা হবে না এবং প্রক্সি দিয়ে সংযোগ কাজ করবে না।


4
বন্দরটি ইন-তে রূপান্তর করা দরকার? যে সরকারী পৃষ্ঠা ভুল ফায়ারফক্স প্রক্সি উদাহরণ করা হবে: seleniumhq.org/docs/04_webdriver_advanced.jsp তাদের উদাহরণে, PROXYHOST: PROXYPORT একটি স্ট্রিং হিসাবে পাস করা হয়েছে।
পাইডারম্যান

@ পাইদারম্যান, আপনি Proxy()ক্লাস নিয়ে FirefoxProfile()ক্লাস বিভ্রান্ত করছেন । প্রোফাইল পছন্দগুলি ব্যবহার করে আপনাকে আইপি এবং পোর্ট আলাদাভাবে পাস করতে হবে এবং কাস্টিং portকরতে হবে int()। ইন Proxy()বর্গ আপনি শুধু স্ট্রিং containig পাস "আইপি: port", এবং নিশ্চয় এটা আপনার জন্য কাজ বাকি আছে।
এম

7

Sock5 প্রক্সি সেট আপ করার চেষ্টা করুন। আমি একই সমস্যার মুখোমুখি হয়েছিলাম এবং এটি মোজা প্রক্সি ব্যবহার করে সমাধান করা হয়

def install_proxy(PROXY_HOST,PROXY_PORT):
        fp = webdriver.FirefoxProfile()
        print PROXY_PORT
        print PROXY_HOST
        fp.set_preference("network.proxy.type", 1)
        fp.set_preference("network.proxy.http",PROXY_HOST)
        fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
        fp.set_preference("network.proxy.https",PROXY_HOST)
        fp.set_preference("network.proxy.https_port",int(PROXY_PORT))
        fp.set_preference("network.proxy.ssl",PROXY_HOST)
        fp.set_preference("network.proxy.ssl_port",int(PROXY_PORT))  
        fp.set_preference("network.proxy.ftp",PROXY_HOST)
        fp.set_preference("network.proxy.ftp_port",int(PROXY_PORT))   
        fp.set_preference("network.proxy.socks",PROXY_HOST)
        fp.set_preference("network.proxy.socks_port",int(PROXY_PORT))   
        fp.set_preference("general.useragent.override","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A")
        fp.update_preferences()
        return webdriver.Firefox(firefox_profile=fp)

তারপরে install_proxy ( ip , port ) আপনার প্রোগ্রাম থেকে কল করুন।


প্রক্সি শংসাপত্রগুলি গ্রহণ করতে আপনি কীভাবে এটি সংশোধন করবেন?
noamam

7

যাচাই সহ প্রক্সি। এটি মাইখাইল মার্তসিনিয়ুক নমুনা স্ক্রিপ্ট থেকে রেফারেন্সে সম্পূর্ণ নতুন অজগর স্ক্রিপ্ট।

# Load webdriver
from selenium import webdriver

# Load proxy option
from selenium.webdriver.common.proxy import Proxy, ProxyType

# Configure Proxy Option
prox = Proxy()
prox.proxy_type = ProxyType.MANUAL

# Proxy IP & Port
prox.http_proxy = “0.0.0.0:00000”
prox.socks_proxy = “0.0.0.0:00000”
prox.ssl_proxy = “0.0.0.0:00000# Configure capabilities 
capabilities = webdriver.DesiredCapabilities.CHROME
prox.add_to_capabilities(capabilities)

# Configure ChromeOptions
driver = webdriver.Chrome(executable_path='/usr/local/share chromedriver',desired_capabilities=capabilities)

# Verify proxy ip
driver.get("http://www.whatsmyip.org/")

6

যদি কেউ সমাধানের সন্ধান করে তবে কীভাবে তা এখানে:

from selenium import webdriver
PROXY = "YOUR_PROXY_ADDRESS_HERE"
webdriver.DesiredCapabilities.FIREFOX['proxy']={
    "httpProxy":PROXY,
    "ftpProxy":PROXY,
    "sslProxy":PROXY,
    "noProxy":None,
    "proxyType":"MANUAL",
    "autodetect":False
}
driver = webdriver.Firefox()
driver.get('http://www.whatsmyip.org/')

4

ফায়ারফক্সপ্রোফাইল সেট করে চেষ্টা করুন

from selenium import webdriver
import time


"Define Both ProxyHost and ProxyPort as String"
ProxyHost = "54.84.95.51" 
ProxyPort = "8083"



def ChangeProxy(ProxyHost ,ProxyPort):
    "Define Firefox Profile with you ProxyHost and ProxyPort"
    profile = webdriver.FirefoxProfile()
    profile.set_preference("network.proxy.type", 1)
    profile.set_preference("network.proxy.http", ProxyHost )
    profile.set_preference("network.proxy.http_port", int(ProxyPort))
    profile.update_preferences()
    return webdriver.Firefox(firefox_profile=profile)


def FixProxy():
    ""Reset Firefox Profile""
    profile = webdriver.FirefoxProfile()
    profile.set_preference("network.proxy.type", 0)
    return webdriver.Firefox(firefox_profile=profile)


driver = ChangeProxy(ProxyHost ,ProxyPort)
driver.get("http://whatismyipaddress.com")

time.sleep(5)

driver = FixProxy()
driver.get("http://whatismyipaddress.com")

এই প্রোগ্রামটি উইন্ডোজ 8 এবং ম্যাক ওএসএক্স উভয়ই পরীক্ষিত । আপনি যদি ম্যাক ওএসএক্স ব্যবহার করছেন এবং যদি আপনার সেলেনিয়াম আপডেট না হয় তবে আপনি মুখোমুখি হতে পারেন selenium.common.exceptions.WebDriverException। যদি তা হয় তবে আপনার সেলেনিয়ামটি আপগ্রেড করার পরে আবার চেষ্টা করুন

pip install -U selenium

4

উপরে বর্ণিত ফলাফলটি সঠিক হতে পারে তবে সর্বশেষতম ওয়েবড্রাইভারের সাথে কাজ করছে না। উপরের প্রশ্নের জন্য আমার সমাধান এখানে। সাধারণ এবং মিষ্টি


        http_proxy  = "ip_addr:port"
        https_proxy = "ip_addr:port"

        webdriver.DesiredCapabilities.FIREFOX['proxy']={
            "httpProxy":http_proxy,
            "sslProxy":https_proxy,
            "proxyType":"MANUAL"
        }

        driver = webdriver.Firefox()

বা

    http_proxy  = "http://ip:port"
    https_proxy = "https://ip:port"

    proxyDict = {
                    "http"  : http_proxy,
                    "https" : https_proxy,
                }

    driver = webdriver.Firefox(proxy=proxyDict)

2

উপরে এবং এই প্রশ্নের উত্তরগুলি আমার কাছে লিনাক্সে সেলেনিয়াম 3.14 এবং ফায়ারফক্স 68.9 নিয়ে কাজ করে নি বা অযথা জটিল। আমার একটি ডাব্লুপিএডি কনফিগারেশন ব্যবহার করা দরকার, কখনও কখনও প্রক্সি (কোনও ভিপিএন-এর) পিছনে, এবং কখনও কখনও না। কোডটি কিছুটা অধ্যয়ন করার পরে, আমি এখানে এলাম:

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

proxy = Proxy({'proxyAutoconfigUrl': 'http://wpad/wpad.dat'})
profile = FirefoxProfile()
profile.set_proxy(proxy)
driver = webdriver.Firefox(firefox_profile=profile)

প্রক্সি সূচনাটি প্রক্সি টাইপকে প্রক্সি টাইপ.প্যাক (ইউআরএল থেকে স্বতঃরূপকরণ) এ পার্শ্ব-প্রতিক্রিয়া হিসাবে সেট করে।

এটি ফায়ারফক্সের অটোডেটেক্টের সাথে কাজ করে:

from selenium.webdriver.common.proxy import ProxyType

proxy = Proxy({'proxyType': ProxyType.AUTODETECT})

তবে আমি মনে করি না যে ডাব্লুপিএড যেভাবে অভ্যন্তরীণ ইউআরএল (প্রক্সড নয়) এবং বাহ্যিক (প্রক্সড) উভয় ক্ষেত্রেই এটি কাজ করবে। অনুরূপ প্রক্সি সেটিংস ম্যানুয়াল কনফিগারেশনের জন্যও কাজ করা উচিত। সম্ভাব্য প্রক্সি সেটিংসটি এখানে কোডটিতে দেখা যাবে

দ্রষ্টব্য যে proxy=proxyড্রাইভার হিসাবে সরাসরি প্রক্সি অবজেক্টটি কাজ করে না - এটি গ্রহণ করা হলেও তা উপেক্ষা করা হয় (অবমূল্যায়নের সতর্কতা থাকা উচিত, তবে আমার ক্ষেত্রে আমি মনে করি বেহেভে এটি গ্রাস করছে)।



0

এটি আমার পক্ষে কাজ করেছে এবং একটি শিরোনামহীন ব্রাউজার ব্যবহার করার অনুমতি দিয়েছে, আপনাকে কেবল আপনার প্রক্সি পাস করার পদ্ধতিটি কল করতে হবে।

def setProxy(proxy):
        options = Options()
        options.headless = True
        #options.add_argument("--window-size=1920,1200")
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("--no-sandbox")
        prox = Proxy()
        prox.proxy_type = ProxyType.MANUAL
        prox.http_proxy = proxy
        prox.ssl_proxy = proxy
        capabilities = webdriver.DesiredCapabilities.CHROME
        prox.add_to_capabilities(capabilities)
        return webdriver.Chrome(desired_capabilities=capabilities, options=options, executable_path=DRIVER_PATH)

-2

টর পরিষেবা চালানোর চেষ্টা করুন, আপনার কোডটিতে নিম্নলিখিত ফাংশনটি যুক্ত করুন।

def connect_tor(port):

socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', port, True)
socket.socket = socks.socksocket

def main():

connect_tor()
driver = webdriver.Firefox()

এই পোস্টে তথ্যের অভাব রয়েছে, কানেক্ট_অটার () এবং প্রধান () ফাংশনগুলির কোনও সঠিক ইন্ডেন্টেশন নেই, এবং কানেক্ট_অটার () কলটি উদাহরণটিতে বাধ্যতামূলক আর্গুমেন্ট "পোর্ট" অনুপস্থিত। আমার কোন টর পোর্ট ব্যবহার করা উচিত? টরের বন্দরের তথ্য আমি কোথায় পাব?
কার্ল

টোর নেটওয়ার্ক (যদিও নাম প্রকাশের অতিরিক্ত স্তর যুক্ত করা হয়) খুব ধীর।
স্কেপটিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.