JS отключен при попытке получить страницу через Selenium "--headless=new"
API Twitter теперь платный, поэтому теперь мне нужно написать парсер страниц твитов. Я использую прокси-сервер Socks5.
Поэтому моим первым шагом было получить страницу твита напрямую через прокси-сервер Socks5. У меня код 302 и бесконечный редирект.
Затем я попробовал добавить файлы cookie и получил страницу «Пожалуйста, включите JS».
Итак, теперь мы решили использовать Selenium для получения этой страницы. Когда я пытаюсь получить страницу безheadless=new
проблем нет, но когда я пытаюсь использовать этот аргумент, снова появляется страница «пожалуйста, включите JS».
Что я пробовал:
- Как включить JavaScript с помощью Headless Chrome в селене
- Selenium webdriver: изменение флага navigator.webdriver для предотвращения обнаружения селена.
- Привет! Мой сценарий Selenium не работает в безголовом режиме, но работает нормально без безголового режима. Сообщение об ошибке (NoSuchElementException)? Почему?(Похоже на другие)
Также я пробовал устанавливать разные пользовательские агенты, разные библиотеки Selenium, явно задавать путь к драйверу Chrome (v114.0.5735.90
драйвер и Google Chromev114.0.5735.199
) и разные браузеры (Edge). JS был включен.
Я использую последнюю версию библиотеки Selenium, язык C#.
Я создал простое консольное приложение для облегчения отладки — приведенный ниже базовый код должен работать (я считаю):
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
Proxy proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.SocksVersion = 5;
proxy.SocksProxy = "host:port";
var options = new ChromeOptions();
options.AddArguments("--headless=new");
options.Proxy = proxy;
string pageSource = "";
using (var driver = new ChromeDriver(options))
{
driver.Navigate().GoToUrl("https://twitter.com/ElonMuskAOC/status/1677171220184469505");
pageSource = driver.PageSource;
}
Console.ReadLine();
1 ответ
Все в порядке, просто JS нужно время на выполнение). Тег noscript всегда находится на странице и не требует дополнительного времени для появления.