如何在python中将chrome webdriver headless与.pac文件代理一起使用?

2024-09-28 23:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

情况如下: 我有一个.pac url作为代理。在Ubuntu中,代理可以作为网络代理使用,也可以设置为自动模式,并在配置url中填充.pac url。 当我使用python从Google图像中爬行时,对Google的请求将不起作用。所以我使用selenium的chromewebdriver来模拟uses的鼠标和键盘操作及其工作。 然后我添加'--headless'参数来增加并发量,得到一个TimeoutException。你知道吗

然后我下载.pac文件并尝试使用“options.add\参数('--代理pac url=xxx.pac公司“)”来解决此问题,但代理仍然无法工作。你知道吗

我得到了一个使用chrome扩展名“SwitchyOmega”来使用.pac文件代理的解决方案。 当我从github下载最新版本并使用options.add\扩展名('xxx/开关)_铬.crx“)”加载扩展,得到:“from unknown error:CRX verification failed:3”

最后,在chrome中配置SwitchyOmega,并使用开发工具将本地扩展名文件打包为.crx,在webdriver中正确加载了扩展名。但是我发现扩展没有配置。你知道吗

所以我怎么才能解决这个代理问题,谢谢!你知道吗

这是我的密码:

class GoogleCrawler:

def __init__(self):
    driver_executable = self.get_driver_executable()
    options = webdriver.ChromeOptions()
    options.add_argument('blink-settings=imagesEnabled=false')
    # options.add_argument('--headless')
    # options.add_argument('--proxy-pac-url=./xxx.pac')
    # options.add_extension('./SwitchyOmega_Chromium.crx')
    self.browser = webdriver.Chrome(driver_executable,
                                    chrome_options=options)
    self.driver_version_check()

def get_google_image_urls(self, keyword):
    self.browser.get(f'https://www.google.com/search?q={keyword}&tbm=isch')
    time.sleep(2)

    img_urls = []
    first_thumbnail_image_xpath = '//div[@data-ri="0"]'
    image_xpath = '//div[@class="irc_c i8187 immersive-container"]//img[@class="irc_mi"]'
    body_element = self.browser.find_element_by_tag_name('body')

    wait = WebDriverWait(self.browser, 15)
    first_thumbnail_image = wait.until(
        element_to_be_clickable((By.XPATH, first_thumbnail_image_xpath)))
    first_thumbnail_image.click()

    scroll_flag = 0
    last_scroll_distance = 0
    while scroll_flag <= 50:
        image_elements = self.browser.find_elements(By.XPATH, image_xpath)
        img_urls.extend([
            image_element.get_attribute('src')
            for image_element in image_elements
        ])

        body_element.send_keys(Keys.RIGHT)

        scroll_distance = self.browser.execute_script(
            'return window.pageYOffset;')
        if scroll_distance == last_scroll_distance:
            scroll_flag += 1
        else:
            last_scroll_distance = scroll_distance
            scroll_flag = 0

    self.browser.close()
    img_urls = set(img_urls)
    print(
        f'[INFO]Scraping Image urls DONE: Keyword: {keyword}, Total: {len(img_urls)}'
    )
    return keyword, img_urls

Tags: imageselfbrowseraddurl代理imgget