{"id":12624,"date":"2025-05-30T14:14:35","date_gmt":"2025-06-04T06:46:35","guid":{"rendered":"https:\/\/badgameshow.com\/steven\/?p=12624"},"modified":"2025-06-04T14:14:35","modified_gmt":"2025-06-04T06:46:35","slug":"python-tor-proxy-%e5%a4%9aip%e8%bd%89%e6%8f%9bselenium%e7%ad%86%e8%a8%98","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/steven\/uncategorized\/python-tor-proxy-%e5%a4%9aip%e8%bd%89%e6%8f%9bselenium%e7%ad%86%e8%a8%98\/","title":{"rendered":"2025 \u6700\u65b0\u7248 Python Tor Proxy \u591a IP \u8f49\u63db\u8207 Selenium \u81ea\u52d5\u5316\u6559\u5b78"},"content":{"rendered":"<p>\u5728\u672c\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u5011\u5c07\u6df1\u5165\u63a2\u8a0e\u5982\u4f55\u5728 Python \u4e2d\u4f7f\u7528 Tor \u4ee3\u7406\u4f86\u9032\u884c\u591a IP \u6e2c\u8a66\uff0c\u7279\u5225\u662f\u8207 Selenium \u7d50\u5408\u4f7f\u7528\u7684\u65b9\u5f0f\u3002\u9019\u662f\u9032\u884c\u7db2\u9801\u722c\u87f2\u6216\u81ea\u52d5\u5316\u6e2c\u8a66\u6642\u7684\u4e00\u500b\u91cd\u8981\u6280\u5de7\uff0c\u53ef\u4ee5\u6709\u6548\u907f\u514d IP \u88ab\u5c01\u9396\u7684\u554f\u984c\u3002\u672c\u6587\u5c07\u63d0\u4f9b\u5b8c\u6574\u7684\u6559\u5b78\u6d41\u7a0b\u3001\u5be6\u4f5c\u7bc4\u4f8b\u3001\u932f\u8aa4\u6392\u9664\u4ee5\u53ca\u5ef6\u4f38\u61c9\u7528\uff0c\u78ba\u4fdd\u4f60\u80fd\u5920\u8f15\u9b06\u4e0a\u624b\u3002<\/p>\n<p>## 1. \u4e0b\u8f09 Tor<\/p>\n<p>\u9996\u5148\uff0c\u6211\u5011\u9700\u8981\u4e0b\u8f09\u4e26\u5b89\u88dd Tor\u3002\u4f60\u53ef\u4ee5\u5f9e\u5b98\u65b9\u7db2\u7ad9\u7372\u53d6\u6700\u65b0\u7248\u672c\uff1a[Tor Project \u4e0b\u8f09\u9801\u9762](https:\/\/www.torproject.org\/download\/tor\/)<\/p>\n<p>### Linux \u5b89\u88dd<\/p>\n<p>\u82e5\u4f60\u4f7f\u7528 Linux\uff0c\u53ef\u4ee5\u900f\u904e Homebrew \u5b89\u88dd Tor\uff0c\u57f7\u884c\u4ee5\u4e0b\u6307\u4ee4\uff1a<\/p>\n<p>&#8220;`bash<br \/>\nbrew install tor<br \/>\n&#8220;`<\/p>\n<p>## 2. \u66f4\u6539 torrc \u53c3\u6578<\/p>\n<p>### Windows<\/p>\n<p>\u5728 Windows \u4e0a\uff0c\u7b2c\u4e00\u6b21\u57f7\u884c `tor.exe` \u5f8c\uff0c\u7cfb\u7d71\u6703\u81ea\u52d5\u751f\u6210\u8a2d\u5b9a\u6a94\uff0c\u8def\u5f91\u5982\u4e0b\uff1a<\/p>\n<p>&#8220;`<br \/>\nC:\\Users\\<USER>\\AppData\\Roaming\\tor<br \/>\n&#8220;`<\/p>\n<p>### Linux<\/p>\n<p>\u5728 Linux \u4e0a\uff0c\u6253\u958b Tor \u7684\u8a2d\u5b9a\u6a94\uff1a<\/p>\n<p>&#8220;`bash<br \/>\nnano \/usr\/local\/etc\/tor\/torrc<br \/>\n&#8220;`<\/p>\n<p>\u7136\u5f8c\u5132\u5b58\u4ee5\u4e0b\u8a2d\u5b9a\uff1a<\/p>\n<p>&#8220;`plaintext<br \/>\nControlPort 9051<br \/>\nSocksPort 9000 IsolateDestAddr<br \/>\nSocksPort 9001 IsolateDestAddr<br \/>\nSocksPort 9002 IsolateDestAddr<br \/>\nSocksPort 9003 IsolateDestAddr<br \/>\nSocksPort 9004 IsolateDestAddr<br \/>\n&#8220;`<\/p>\n<p>## 3. \u555f\u52d5 Tor<\/p>\n<p>### Windows<\/p>\n<p>\u57f7\u884c `tor.exe` \u4f86\u555f\u52d5 Tor \u670d\u52d9\u3002<\/p>\n<p>### Linux<\/p>\n<p>\u5728 Linux \u4e0a\uff0c\u57f7\u884c\u4ee5\u4e0b\u6307\u4ee4\u4f86\u555f\u52d5 Tor\uff1a<\/p>\n<p>&#8220;`bash<br \/>\ntor<br \/>\n&#8220;`<\/p>\n<p>## 4. \u8a2d\u7f6e Tor \u5bc6\u78bc<\/p>\n<p>\u70ba\u4e86\u589e\u5f37\u5b89\u5168\u6027\uff0c\u6211\u5011\u9700\u8981\u8a2d\u7f6e Tor \u63a7\u5236\u7aef\u53e3\u7684\u5bc6\u78bc\u3002\u57f7\u884c\u4ee5\u4e0b\u6307\u4ee4\uff1a<\/p>\n<p>&#8220;`bash<br \/>\ntor &#8211;hash-password &#8220;password&#8221;<br \/>\n&#8220;`<\/p>\n<p>\u9019\u5c07\u7522\u751f\u4e00\u500b\u54c8\u5e0c\u503c\uff0c\u8a18\u4e0b\u4f86\u4e26\u4fee\u6539\u4ee5\u4e0b\u6a94\u6848\uff1a<\/p>\n<p>&#8211; Windows: `C:\\Users\\<USER>\\AppData\\Roaming\\tor\\torrc`<br \/>\n&#8211; Linux: `\/usr\/local\/etc\/tor\/torrc`<\/p>\n<p>\u5728\u6a94\u6848\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5167\u5bb9\uff1a<\/p>\n<p>&#8220;`plaintext<br \/>\nHashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047<br \/>\n&#8220;`<\/p>\n<p>\u5b8c\u6574\u7684 `torrc` \u8a2d\u7f6e\u5982\u4e0b\uff1a<\/p>\n<p>&#8220;`plaintext<br \/>\nControlPort 9051<br \/>\nSocksPort 9000 IsolateDestAddr<br \/>\nSocksPort 9001 IsolateDestAddr<br \/>\nSocksPort 9002 IsolateDestAddr<br \/>\nSocksPort 9003 IsolateDestAddr<br \/>\nSocksPort 9004 IsolateDestAddr<br \/>\nHashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047<br \/>\n&#8220;`<\/p>\n<p>## 5. \u4f7f\u7528 Selenium \u8207 Tor \u4ee3\u7406<\/p>\n<p>\u78ba\u4fdd Tor \u5df2\u7d93\u555f\u52d5\u5f8c\uff0c\u6211\u5011\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b Python \u7a0b\u5f0f\u78bc\u4f86\u6bcf 3 \u79d2\u66f4\u63db\u4e00\u6b21 IP\uff1a<\/p>\n<p>&#8220;`python<br \/>\nfrom selenium import webdriver<br \/>\nfrom selenium.webdriver.chrome.options import Options<br \/>\nfrom selenium.webdriver.chrome.service import Service<br \/>\nfrom webdriver_manager.chrome import ChromeDriverManager<br \/>\nfrom stem import Signal<br \/>\nfrom stem.control import Controller<br \/>\nimport time<br \/>\nimport random<\/p>\n<p>def renew_tor_ip():<br \/>\n    with Controller.from_port(port=9051) as controller:<br \/>\n        controller.authenticate(password=&#8217;password&#8217;)  # \u7528\u4f60\u7684 Tor \u63a7\u5236\u7aef\u53e3\u5bc6\u78bc\u66ff\u63db &#8216;password&#8217;<br \/>\n        controller.signal(Signal.NEWNYM)<br \/>\n    time.sleep(5)  # \u7b49\u5f85 Tor \u751f\u6210\u65b0\u7684\u8def\u7531<\/p>\n<p>def setup_chrome_with_tor():<br \/>\n    socks_port = random.choice([&#8216;9000&#8217;, &#8216;9001&#8217;, &#8216;9002&#8217;, &#8216;9003&#8217;, &#8216;9004&#8217;])  # \u96a8\u6a5f\u9078\u64c7\u4e00\u500b SocksPort<br \/>\n    chrome_options = Options()<br \/>\n    # chrome_options.add_argument(&#8216;&#8211;headless&#8217;)  # \u82e5\u9700\u8981\u7121\u982d\u6a21\u5f0f\uff0c\u8acb\u53d6\u6d88\u8a3b\u89e3<br \/>\n    chrome_options.add_argument(&#8216;&#8211;proxy-server=socks5:\/\/127.0.0.1:&#8217; + socks_port)  # \u914d\u7f6e Chrome \u4f7f\u7528 Tor \u4ee3\u7406<\/p>\n<p>    # \u4f7f\u7528 ChromeDriverManager \u81ea\u52d5\u7ba1\u7406 ChromeDriver<br \/>\n    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)<br \/>\n    return driver<\/p>\n<p>while True:<br \/>\n    # \u4f7f\u7528\u9019\u500b\u51fd\u6578\u4f86\u555f\u52d5\u700f\u89bd\u5668\u4e26\u901a\u904e Tor \u8a2a\u554f\u7db2\u7ad9<br \/>\n    driver = setup_chrome_with_tor()<br \/>\n    driver.get(&#8216;http:\/\/icanhazip.com&#8217;)<br \/>\n    print(driver.page_source)  # \u6253\u5370\u7576\u524d IP \u5730\u5740<br \/>\n    driver.quit()<\/p>\n<p>    # \u66f4\u63db Tor \u8def\u7531\u4f86\u7372\u5f97\u65b0\u7684 IP \u5730\u5740<br \/>\n    renew_tor_ip()<\/p>\n<p>    time.sleep(3)<br \/>\n&#8220;`<\/p>\n<p>### \u932f\u8aa4\u6392\u9664<\/p>\n<p>1. **Tor \u672a\u555f\u52d5**\uff1a\u78ba\u4fdd Tor \u670d\u52d9\u6b63\u5728\u904b\u884c\u3002<br \/>\n2. **\u4ee3\u7406\u8a2d\u7f6e\u932f\u8aa4**\uff1a\u6aa2\u67e5\u6240\u4f7f\u7528\u7684 SocksPort \u662f\u5426\u6b63\u78ba\u3002<br \/>\n3. **\u7db2\u8def\u9023\u63a5\u554f\u984c**\uff1a\u78ba\u4fdd\u4f60\u7684\u7db2\u8def\u9023\u63a5\u6b63\u5e38\u3002<\/p>\n<p>## \u5ef6\u4f38\u61c9\u7528<\/p>\n<p>\u5229\u7528 Tor \u4ee3\u7406\u6280\u8853\uff0c\u4f60\u53ef\u4ee5\u9032\u884c\u66f4\u5ee3\u6cdb\u7684\u7db2\u9801\u722c\u87f2\u4efb\u52d9\uff0c\u7279\u5225\u662f\u9700\u8981\u96b1\u85cf\u771f\u5be6 IP \u6216\u8005\u9700\u8981\u9ad8\u983b\u7387\u8acb\u6c42\u7684\u60c5\u6cc1\u3002\u8acb\u9075\u5b88\u7db2\u7ad9\u7684\u4f7f\u7528\u689d\u6b3e\uff0c\u907f\u514d\u5c0d\u4f3a\u670d\u5668\u9020\u6210\u8ca0\u64d4\u3002<\/p>\n<p>\u5982\u9700\u9032\u4e00\u6b65\u4e86\u89e3 Python \u76f8\u95dc\u6280\u8853\uff0c\u5efa\u8b70\u53c3\u8003 [Vocus \u6559\u5b78\u6587](https:\/\/vocus.cc\/)\u3002<\/p>\n<p>## Q&#038;A\uff08\u5e38\u898b\u554f\u984c\u89e3\u7b54\uff09<\/p>\n<p>**Q1: \u53ef\u4ee5\u4f7f\u7528\u5176\u4ed6\u4ee3\u7406\u670d\u52d9\u5668\u55ce\uff1f**<br \/>\nA1: \u662f\u7684\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528\u5176\u4ed6\u4ee3\u7406\u670d\u52d9\u5668\uff0c\u4f46\u9700\u78ba\u4fdd\u5b83\u5011\u652f\u6301 SOCKS5 \u5354\u8b70\u3002<\/p>\n<p>**Q2: \u70ba\u4ec0\u9ebc\u6211\u9700\u8981\u66f4\u63db IP\uff1f**<br \/>\nA2: \u66f4\u63db IP \u53ef\u4ee5\u5e6b\u52a9\u907f\u514d\u88ab\u7db2\u7ad9\u5c01\u9396\uff0c\u7279\u5225\u662f\u5728\u9032\u884c\u5927\u91cf\u8acb\u6c42\u6642\u3002<\/p>\n<p>**Q3: Tor \u6703\u5f71\u97ff\u6211\u7684\u7db2\u901f\u55ce\uff1f**<br \/>\nA3: \u662f\u7684\uff0c\u4f7f\u7528 Tor \u53ef\u80fd\u6703\u5c0e\u81f4\u7db2\u901f\u8b8a\u6162\uff0c\u56e0\u70ba\u5b83\u7d93\u904e\u591a\u500b\u4e2d\u7e7c\u7bc0\u9ede\u3002<\/p>\n<p>&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u672c\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u5011\u5c07\u6df1\u5165\u63a2\u8a0e\u5982\u4f55\u5728 Python &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-12624","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_shortlink":"https:\/\/wp.me\/pcFK27-3hC","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/12624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/comments?post=12624"}],"version-history":[{"count":2,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/12624\/revisions"}],"predecessor-version":[{"id":12626,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/12624\/revisions\/12626"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/media?parent=12624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/categories?post=12624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/tags?post=12624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}