在python / selenium中检查代理

时间:2018-09-02 22:27:04

标签: python selenium proxy

我正在尝试使用selenium和python连接到站点。然后,我决定在整个过程中添加代理,并使用它们连接到站点。代理使用Proxy Broker(python模块)进行抓取。这样我就可以节省很多代理。然后将其保存到文本文件中,当需要连接时,我会从文本文件中随机选择它。但是,这里就是问题所在。连接到站点时,代理有时不起作用。当前,这是我正在使用的代码:

        import asyncio
    from proxybroker import Broker


    async def save(proxies, filename):
        """Save proxies to a file."""
        with open(filename, 'w') as f:
            while True:
                proxy = await proxies.get()
                if proxy is None:
                    break
                proto = 'https' if 'HTTPS' in proxy.types else 'http'
                row = '%s://%s:%d\n' % (proto, proxy.host, proxy.port)
                f.write(row)


    def main():
        proxies = asyncio.Queue()
        broker = Broker(proxies)
        tasks = asyncio.gather(broker.find(types=['HTTP', 'HTTPS'], limit=5),
                            save(proxies, filename='proxies.txt'))
        loop = asyncio.get_event_loop()
        loop.run_until_complete(tasks)


    if __name__ == '__main__':
        main()

    lines = open('proxies.txt').read().splitlines()
    rproxy =random.choice(lines)
    PROXY =  rproxy

此代码是Proxy Broker示例页面(https://proxybroker.readthedocs.io/en/latest/examples.html

中的示例代码。

所以我想做的是两件事之一:

选项1:在删除代理后立即检查代理,然后将可以使用的代理保存在文本文件中,以后再调用

选项2:在连接到站点之前立即检查代理。因此,它将检查代理是否有效,然后是否使用它。如果没有,它会尝试另一个。

我真的不知道如何执行此操作。我的朋友建议的一件事是使用请求并查看代理是否有效,但是我遇到了问题,因为我无法自动格式化代理列表以用于请求。

非常感谢您的帮助/提示。预先谢谢!!!

(编辑)我已经尝试过诸如此类的帖子:

Proxy Check in python

https://github.com/ApsOps/proxy-checker

https://www.calazan.com/how-to-use-proxies-with-an-http-session-using-the-python-requests-package/

https://codereview.stackexchange.com/questions/169246/python-proxy-checker-scanner

他们都没有为我工作:(

1 个答案:

答案 0 :(得分:1)

好吧,我看了一下proxybroker documentation,发现最好的解决方案是检查内置属性interface DrawableSegment {} class LineSegment implements DrawableSegment {} class PercentageSegment implements DrawableSegment {} class Barchart<T extends DrawableSegment> { List<DrawableSegment> drawableSegList = new ArrayList<>(); public static void main(String[] args) throws IOException { Barchart main = new Barchart(); main.add(new LineSegment()); System.out.println(main.getListSize()); main.add(new LineSegment()); System.out.println(main.getListSize()); main.add(new PercentageSegment()); System.out.println(main.getListSize()); } public void add(T t){ if(!drawableSegList.isEmpty() && drawableSegList.get(0).getClass() != t.getClass()){ System.out.println("First element :"+ drawableSegList.get(0).getClass()+" Does not match next Element "+t.getClass()); throw new RuntimeException(); } drawableSegList.add(t); } public int getListSize(){ return this.drawableSegList.size(); } }

proxy.is_working

您可以像这样在代码中实现它:

results = []
for proto in ngtrs:
    if proto == 'CONNECT:25':
        result = await self._check_conn_25(proxy, proto)
    else:
        result = await self._check(proxy, proto)
     results.append(result)

proxy.is_working = True if any(results) else False