Можете ли вы обойти код 403 в Selenium WebDriver, используя куки? - PullRequest
0 голосов
/ 18 октября 2019

Я получаю доступ к строке url через атрибут src элемента img Html, используя WebDriver. Однако, когда я пытаюсь открыть новое окно для этого URL, я получаю доступ 403 Unauthorized, и я не знаю, как его преодолеть. Я прочитал много постов здесь о stackoverflow, но наиболее многообещающее решение, которое я видел, состояло в том, чтобы указать предпочтение User agent в URLConnection, но безрезультатно. Вот мой код:

WebDriver driver = new ChromeDriver();            
        String urlSelector = "body > div.overlay > div#cards"+cardID + " > div.one.card > img.core.load.bg.on";
        WebElement urlElem = driver.findElement(By.cssSelector(urlSelector));
        String url = urlElem.getAttribute("src");
        driver.get(url);

РЕДАКТИРОВАТЬ: Я прочитал в другом посте, что мне может понадобиться передать определенные куки в URLConnection, чтобы избежать ответа 403код и аутентифицировать себя. Поэтому я проверил файлы cookie, которые присутствуют, когда я нахожусь на веб-сайте (используя WebDriver), и результаты показаны ниже:

cookies_one

cookies_two

Однако, если я открываю тот же веб-сайт в обычном браузере (не использую WebDriver), я получаю дополнительные imgur куки, которые являютсясписок ниже:

cookies_three cookies_four

Imgur - это то, что сайт использует для отображения изображений, когда я нажимаю на их ссылкинасколько я понимаю. Я также решил проверить куки на imgur после нажатия на ссылку изображения в обычном браузере, и я получил 2, которые, похоже, связаны с базой данных (?):

cookies_five

Насколько вы можете судить, использовались ли какие-либо из этих файлов cookie для аутентификации, и есть ли способ использовать их в моем URLConnection, чтобы избежать кода ответа 403?

PS: Сайт, о котором идет речь, это сайт

1 Ответ

0 голосов
/ 19 октября 2019

Попробуйте (еще не тестировали):

 WebDriver driver = new ChromeDriver();            
 String urlSelector = "body > div.overlay > div#cards"+cardID + " > div.one.card > img.core.load.bg.on";
  WebElement urlElem = driver.findElement(By.cssSelector(urlSelector));
  String url = urlElem.getAttribute("src");
  ((JavascriptExecutor)driver).executeScript("img = document.createElement('img'); 
      img.src = '"+ url + "';  img.id='forscreenshot'; document.body.appendChild(img);");
         WebDriverWait wait = new WebDriverWait(driver,5);
         WebElement element  = wait.until(ExpectedConditions.presenceOfElementLocated(By.id('forscreenshot')));
         File screenshot = element.getScreenshotAs(OutputType.FILE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...