Невозможно подключиться к Tor, используя запросы, тогда как я сделал то же самое, используя selenium - PullRequest
0 голосов
/ 01 октября 2018

Я написал два скрипта на python: один использует selenium, а другой - requests для подключения к http://check.torproject.org, используя Tor и получите этот текст Поздравляю.Этот браузер настроен на использование Tor , чтобы быть уверенным, что я все делаю правильно.

Когда я использую приведенный ниже скрипт, я получаю текст плавно:

from selenium import webdriver
import os

torexe = os.popen(r"C:\Users\WCS\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe")

options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=socks5://localhost:9050')
driver = webdriver.Chrome(chrome_options=options)

driver.get("http://check.torproject.org")
item = driver.find_element_by_css_selector("h1.not").text
print(item)

driver.quit()

Однако, когда я пытаюсь сделать то же самое, используя requests, я получаю ошибку AttributeError: 'NoneType' object has no attribute 'text':

import requests
from bs4 import BeautifulSoup
import os

torexe = os.popen(r"C:\Users\WCS\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe")

with requests.Session() as s:
    s.proxies['http'] = 'socks5://localhost:9050'
    res = s.get("http://check.torproject.org")
    soup = BeautifulSoup(res.text,"lxml")
    item = soup.select_one("h1.not").text
    print(item)

Как я могу получитьтот же текст, используя requests с этого сайта?

Когда я использую этот print(soup.title.text), я могу получить этот текст Sorry. You are not using Tor., который ясно указывает на то, что requests не сделан черезTor.

1 Ответ

0 голосов
/ 01 октября 2018

check.torproject.org вызывает HTTPS, поэтому, когда запросы следуют за перенаправлением на https://check.torproject.org, вы больше не используете прокси-сервер SOCKS, поскольку он был указан только для протокола http.

Убедитесь, что установленопрокси для HTTP и HTTPS.Кроме того, чтобы разрешать DNS-имена через Tor и не пропускать DNS-запросы, используйте socks5h.

s.proxies['http']  = 'socks5h://localhost:9050'
s.proxies['https'] = 'socks5h://localhost:9050'

. Это должно привести к правильной работе вашего теста.

...