Selenium: как избежать отказа в доступе? - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь перейти на веб-сайт с помощью Selenium, но когда я пытаюсь перейти на следующую страницу, я получаю сообщение об ошибке: «Доступ запрещен». У вас нет прав доступа к «http://blah.com/?" на этом сервере.

Мой код следующий:

import os
import time
from selenium import webdriver

os.environ['MOZ_HEADLESS'] = '1'
petshop_url = 'https://www.blah.com/Filtro=D37608&ordenacao=_maisvendidos&nid=202059'
browser = webdriver.Firefox(executable_path = './geckodriver')


browser.get(petshop_url)
next_button = browser.find_element_by_id('ctl00_Conteudo_ctl02_divBuscaResultadoInferior').find_element_by_class_name('next')
time.sleep(1)
next_button.click()
time.sleep(1)
html_source = browser.page_source
print(html_source)

Я уже пытался очистить кассу и удалитьпрокси, как рекомендовано здесь: Selenium Проблема: доступ запрещен У вас нет разрешения на доступ к «сайту» на этом сервере

Также добавлен и удален спящий режим, пробовал его с Chrome, иубрал опцию «без головы», но ничего не помогло. Есть ли какая-то идея о моей ошибке?

Вот журнал, когда браузер закрывается:

1572780171083   Marionette  TRACE   [16] Received DOM event pageshow for https://www.blah.com/?Filtro=D37608&Ordenacao=_maisvendidos&paginaAtual=3&ComparacaoProdutos=&AdicionaListaCasamento=
1572780171086   Marionette  DEBUG   0 <- [1,6,null,{"value":null}]
1572780171093   webdriver::server   DEBUG   <- 200 OK {"value":null}
1572780172095   webdriver::server   DEBUG   -> GET /session/1ea63780-133a-4649-ba1b-5732a2fed59c/source 
1572780172098   Marionette  DEBUG   0 -> [0,7,"WebDriver:GetPageSource",{}]
1572780172099   Marionette  DEBUG   0 <- [1,7,null,{"value":"<html><head>\n<title>Access Denied</title>\n</head><body>\n<h1>Access Denied</h1>\n \nYou don't have perm ... ccess \"http://www.blah.com/?\” on this server.<p>\nReference #18.debc1002.1572780170.31119482\n\n\n</p></body></html>"}]
1572780172102   webdriver::server   DEBUG   <- 200 OK {"value":"<html><head>\n<title>Access Denied</title>\n</head><body>\n<h1>Access Denied</h1>\n \nYou don't have permission to access \"http://www.blah.com/?\” on this server.<p>\nReference #18.debc1002.1572780170.31119482\n\n\n</p></body></html>"}
1572780172103   webdriver::server   DEBUG   -> DELETE /session/1ea63780-133a-4649-ba1b-5732a2fed59c 
1572780172106   Marionette  DEBUG   0 -> [0,8,"Marionette:Quit",{"flags":["eForceQuit"]}]
1572780172106   Marionette  INFO    Stopped listening on port 56193
1572780172149   Marionette  TRACE   Received observer notification quit-application
1572780172164   Marionette  DEBUG   0 <- [1,8,null,{"cause":"shutdown"}]
1572780172202   webdriver::server   DEBUG   Deleting session
1572780172221   Marionette  DEBUG   0 -> [0,9,"Marionette:Quit",{"flags":["eForceQuit"]}]
1572780172222   Marionette  DEBUG   0 <- [1,9,{"error":"invalid session id","message":"Tried to run command without establishing a connection","stacktrace":"WebDriver ... t@chrome://marionette/content/server.js:249:9\n_onJSONObjectReady/<@chrome://marionette/content/transport.js:501:20\n"},null]
1572780172222   Marionette  DEBUG   Closed connection 0
1572780176394   Marionette  TRACE   Received observer notification xpcom-will-shutdown

Это HTML-код элемента Iпытаюсь нажать. Это элемент из неупорядоченного списка:

<a href="https://www.blah.com/?Filtro=D37608&amp;ordenacao=_maisvendidos&amp;nid=202059&amp;paginaAtual=2" onclick="javascript:MontaUrlLista(&quot;/site/PaginaBuscaNew.aspx?Filtro=D37608&amp;Ordenacao=_maisvendidos&amp;paginaAtual=2&quot;,&quot;ctl00_Conteudo_ctl02_hdnComparacaoProdutos&quot;,&quot;ctl00_Conteudo_ctl02_hdnListaCasamento&quot;); return false">Próxima</a>

1 Ответ

0 голосов
/ 03 ноября 2019

Можете ли вы поделиться URL-адресом, если это возможно, чтобы я мог проверить.

В основном я предполагаю, что сайту требуются файлы cookie / сеанс, который генерируется на главной домашней странице.

Вот советы:

Добавить реферера (опять же зависит от сайта)

desired_capabilities = DesiredCapabilities.CHROME.copy()
desired_capabilities['chrome.page.customHeaders.referrer'] = 'xxxxx.com' (the previous site url)

Попробуйте этот код:

def get_dynamic_website_content(url, first_refer='https://www.google.com'):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')

    chrome_prefs = {}
    options.experimental_options["prefs"] = chrome_prefs
    chrome_prefs['chrome.page.customHeaders.referrer'] = first_refer  

    wd = webdriver.Chrome(chrome_options=options) # live 
    wd = webdriver.Chrome(executable_path="/chromedriver.exe", chrome_options=options)  # desktop env  

    wd.get(url)

    elems = wd.find_elements_by_xpath("//a[@href]")

    for elem in elems:
        link = elem.get_attribute("href") 

        get_dynamic_website_content(link, url) // load recursively by adding refer

    # Add custom return logic etc

Также, пожалуйста, проверьте сетевую страницу домашней страницы и следите за тем, как она загружает следующие страницы.

Проверьте и экспериментируйте для сеанса, файлов cookie, пользовательских заголовков и других, просто чтобы убедиться, что вы добавляете / удаляете их в хром.

...