Ошибка во время рукопожатия WebSocket: неожиданный код ответа: 200 с ChromeDriver и Selenium - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь извлечь данные из следующего веб-сайта: https://www.bigschedules.com/ который работает нормально, когда я делаю это вручную.

Я разработал сценарий с использованием селена и Chromedriver в Python. Раньше он работал нормально, но теперь он показывает ошибку " Ошибка при рукопожатии WebSocket: Неожиданный код ответа: 200 .

Сценарий открывает Chrome и пытается получить данные с сайта, но застревает, как показано на рисунке ниже: [Нажмите здесь, чтобы увидеть изображение] [1]

[1]: https://i.stack.imgur.com/0JxEi.pngenter код здесь

Я использую chromedriver версии 2.42, Selenium версии 3.14

def setupChrome(self):

    # Contains all chrome settings
    self.logger.info("Setting-up Chrome")
    self.settings = webdriver.ChromeOptions()
    #self.settings.add_argument("--incognito")
    self.settings.add_argument('--ignore-ssl-errors')
    self.settings.add_argument('--ignore-certificate-errors')
    self.settings.add_argument('–-disable-web-security')
    self.settings.add_argument('–-allow-running-insecure-content')

def loadBrowser(self):
    self.setupChrome()

    try:
        self.browser = webdriver.Chrome(chrome_options=self.settings,
                                        executable_path="D:\\chromedriver.exe")
        self.browser.maximize_window()

& Я получаю следующие ошибки в стеке консоли:

webtrends.js:1 **A parser-blocking**, cross site (i.e. different eTLD+1) script, https://sdc.oocl.com/dcsg6upoljf1zldtivsnov48s_8o7d/wtid.js, is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See https://www.chromestatus.com/feature/5718547946799104 for more details.
WebTrends.dcsGetId @ webtrends.js:1
(anonymous) @ VM29:431

6[Intervention] **Slow network is detected**. See <URL> for more details. Fallback font will be used while loading: <URL>
application-c962374717.min.js:4 

pascalprecht.translate.$translateSanitization: **No sanitization** strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details.
(anonymous) @ application-c962374717.min.js:4
warn @ application-c962374717.min.js:12
c @ angular-translate.min.js:6
sanitize @ angular-translate.min.js:6
a.interpolate @ angular-translate.min.js:6
q.instant @ angular-translate.min.js:6
n @ angular-translate.min.js:6
fn @ VM201:4
e @ angular.js:16658
P.exp @ angular.js:13144
pre @ angular.js:10436
(anonymous) @ angular.js:1385
wa @ angular.js:10545
q @ angular.js:9911
f @ angular.js:9174
q @ angular.js:9928
f @ angular.js:9174
q @ angular.js:9928
(anonymous) @ angular.js:10273
(anonymous) @ angular.js:17051
$digest @ angular.js:18233
$apply @ angular.js:18531
l @ angular.js:12547
s @ angular.js:12785
y.onload @ angular.js:12702
application-c962374717.min.js:4 

Deprecation warning: **moment().add(period, number) is deprecated. Please use moment().add(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.**
(anonymous) @ application-c962374717.min.js:4
k @ moment-with-locales.min.js:1
T @ moment-with-locales.min.js:1
(anonymous) @ moment-with-locales.min.js:1
(anonymous) @ application-c962374717.min.js:44
invoke @ angular.js:5040
P.instance @ angular.js:11000
q @ angular.js:9865
f @ angular.js:9174
f @ angular.js:9177
f @ angular.js:9177
f @ angular.js:9177
(anonymous) @ angular.js:9039
(anonymous) @ angular.js:9430
d @ angular.js:9217
m @ angular.js:9984
(anonymous) @ angular.js:32398
(anonymous) @ angular.js:1385
(anonymous) @ angular.js:10539
wa @ angular.js:10545
q @ angular.js:9934
(anonymous) @ angular.js:10273
(anonymous) @ angular.js:17051
$digest @ angular.js:18233
$apply @ angular.js:18531
l @ angular.js:12547
s @ angular.js:12785
y.onload @ angular.js:12702
universalModuleDefinition:3 

WebSocket connection to 'wss://www.bigschedules.com/socket.io/?EIO=3&transport=websocket&sid=yywiluhT_bdXDglEAAkc' failed: **Error during WebSocket handshake: Unexpected response code: 200**


n.doOpen @ universalModuleDefinition:3
n.open @ universalModuleDefinition:2
n.probe @ universalModuleDefinition:2
n.onOpen @ universalModuleDefinition:2
n.onHandshake @ universalModuleDefinition:2
n.onPacket @ universalModuleDefinition:2
(anonymous) @ universalModuleDefinition:2
n.emit @ universalModuleDefinition:2
n.onPacket @ universalModuleDefinition:2
r @ universalModuleDefinition:2
(anonymous) @ universalModuleDefinition:2
e.decodePayloadAsBinary @ universalModuleDefinition:2
e.decodePayload @ universalModuleDefinition:2
n.onData @ universalModuleDefinition:2
(anonymous) @ universalModuleDefinition:2
n.emit @ universalModuleDefinition:2
i.onData @ universalModuleDefinition:2
i.onLoad @ universalModuleDefinition:2
hasXDR.r.onreadystatechange @ universalModuleDefinition:2
application-c962374717.min.js:23 Uncaught TypeError: **Cannot assign to read only property 'tagName' of object '#<HTMLDivElement>'**
    at Object.handler.tagNameHandler (application-c962374717.min.js:23)
    at Object.handler.constructInfo (application-c962374717.min.js:23)
    at application-c962374717.min.js:23
handler.tagNameHandler @ application-c962374717.min.js:23
handler.constructInfo @ application-c962374717.min.js:23
(anonymous) @ application-c962374717.min.js:23
4application-c962374717.min.js:23

Uncaught TypeError: **Cannot assign to read only property** 'tagName' of object '#<HTMLInputElement>'
    at Object.handler.tagNameHandler (application-c962374717.min.js:23)
    at Object.handler.constructInfo (application-c962374717.min.js:23)
    at application-c962374717.min.js:23
handler.tagNameHandler @ application-c962374717.min.js:23
handler.constructInfo @ application-c962374717.min.js:23
(anonymous) @ application-c962374717.min.js:23
application-c962374717.min.js:23

Uncaught TypeError: **Cannot assign to read only property** 'tagName' of object '[object HTMLAnchorElement]'
    at Object.handler.tagNameHandler (application-c962374717.min.js:23)
    at Object.handler.constructInfo (application-c962374717.min.js:23)
    at application-c962374717.min.js:23
handler.tagNameHandler @ application-c962374717.min.js:23
handler.constructInfo @ application-c962374717.min.js:23
(anonymous) @ application-c962374717.min.js:23
query:1 **Failed to load resource**: the server responded with a status of 401 (Unauthorized)
application-c962374717.min.js:23 

Uncaught TypeError: **Cannot assign to read only property** 'tagName' of object '[object HTMLAnchorElement]'
    at Object.handler.tagNameHandler (application-c962374717.min.js:23)
    at Object.handler.constructInfo (application-c962374717.min.js:23)
    at tracking (application-c962374717.min.js:23)
    at firstThingAfterSearch (application-c962374717.min.js:23)
    at monitor (application-c962374717.min.js:23)
    at application-c962374717.min.js:23
handler.tagNameHandler @ application-c962374717.min.js:23
handler.constructInfo @ application-c962374717.min.js:23
tracking @ application-c962374717.min.js:23
firstThingAfterSearch @ application-c962374717.min.js:23
monitor @ application-c962374717.min.js:23
(anonymous) @ application-c962374717.min.js:23
setTimeout (async)
(anonymous) @ application-c962374717.min.js:23
wrappedFn @ application-c962374717.min.js:23
angular.js:12759 GET https://www.bigschedules.com/api/routeSearch/query?_=1537193893310&carrier=COSU&carrier=APLU&carrier=MSCU&departureFrom=2018-09-17T00:00:00.000Z&departureTo=2018-09-30T23:59:59.999Z&fndID=P1015&isOriginal=true&porID=P94&requestRefNo=432d9035-b7bb-40d9-b03f-208ffcbdafa3&socketID=yywiluhT_bdXDglEAAkc **401 (Unauthorized)**
(anonymous) @ angular.js:12759
q @ angular.js:12492
(anonymous) @ angular.js:12244
(anonymous) @ angular.js:17051
$digest @ angular.js:18233
(anonymous) @ angular.js:18462
e @ angular.js:6362
(anonymous) @ angular.js:6642
setTimeout (async)
h.defer @ angular.js:6640
$evalAsync @ angular.js:18460
(anonymous) @ angular.js:16923
k @ angular.js:17095
l @ angular.js:17122
c @ angular.js:17131
r @ bluebird.min.js:31
i._settlePromiseFromHandler @ bluebird.min.js:30
i._settlePromise @ bluebird.min.js:30
i._settlePromise0 @ bluebird.min.js:30
i._settlePromises @ bluebird.min.js:30
r._drainQueue @ bluebird.min.js:29
r._drainQueues @ bluebird.min.js:29
drainQueues @ bluebird.min.js:29
Promise.then (async)
r @ bluebird.min.js:30
r._queueTick @ bluebird.min.js:29
s @ bluebird.min.js:29
p.hasDevTools.r.settlePromises @ bluebird.min.js:29
i._fulfill @ bluebird.min.js:30
i._resolveCallback @ bluebird.min.js:30
(anonymous) @ bluebird.min.js:30
Do @ recaptcha__en.js:251
(anonymous) @ recaptcha__en.js:249
T4 @ recaptcha__en.js:71
ta @ recaptcha__en.js:71
Y @ recaptcha__en.js:68
application-c962374717.min.js:23 

Uncaught TypeError: **Cannot assign to read only property** 'tagName' of object '[object HTMLAnchorElement]'
    at Object.handler.tagNameHandler (application-c962374717.min.js:23)
    at Object.handler.constructInfo (application-c962374717.min.js:23)
    at tracking (application-c962374717.min.js:23)
    at firstThingAfterSearch (application-c962374717.min.js:23)
    at monitor (application-c962374717.min.js:23)
    at application-c962374717.min.js:23
handler.tagNameHandler @ application-c962374717.min.js:23
handler.constructInfo @ application-c962374717.min.js:23
tracking @ application-c962374717.min.js:23
firstThingAfterSearch @ application-c962374717.min.js:23
monitor @ application-c962374717.min.js:23
(anonymous) @ application-c962374717.min.js:23
setTimeout (async)
(anonymous) @ application-c962374717.min.js:23
wrappedFn @ application-c962374717.min.js:23
angular.js:12759 

GET https://www.bigschedules.com/api/routeSearch/query?_=1537193947261&carrier=COSU&carrier=APLU&carrier=MSCU&departureFrom=2018-09-17T00:00:00.000Z&departureTo=2018-09-30T23:59:59.999Z&fndID=P156&isOriginal=true&porID=P94&requestRefNo=ba8fbb09-d98a-4b44-96e0-040511775c80&socketID=yywiluhT_bdXDglEAAkc **401 (Unauthorized)**

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Из ваших испытаний кода не было ясно, вызвали ли вы url https://www.bigschedules.com/tou или нет.Но согласно вашей трассировке стека ошибок ваша основная проблема:

WebSocket connection to 'wss://www.bigschedules.com/socket.io/?EIO=3&transport=websocket&sid=yywiluhT_bdXDglEAAkc' failed: Error during WebSocket handshake: Unexpected response code: 200

Причиной ошибки может быть множество причин:

  • Потенциальная причинаможет быть, сетевой запрос для этого сценария может быть заблокирован браузером при этой или будущей загрузке страницы из-за плохого сетевого подключения.
  • Согласно Вмешательство: Блокировка загрузки перекрестного источника, анализатор-блокирующие скрипты, вставленные через document.write для пользователей в 2G :
    • Для пользователей при медленных соединениях, таких как 2G, снижение производительности от сторонних скриптов, загружаемых через document.writeчасто бывает настолько серьезным, что задерживает отображение содержимого главной страницы на десятки секунд.Эта функция блокирует загрузку сценариев, блокирующих синтаксический анализатор, вставленных через document.write, в случае отсутствия кэша HTTP для пользователей, подключенных к сети 2G.Эта функция будет применима только к таким сценариям в основном кадре.

  • Другая причина может заключаться в обнаружении медленной сети и откатеПри загрузке использовался шрифт , который настроен на стратегию Без очистки и имеет серьезные последствия для безопасности.Следовательно, вы сталкиваетесь:

    response code: 200
    

Решение

  • Обновите Среду тестирования со всеми последними двоичными файлами в терминах Selenium Client , WebDriver и Веб-браузер * вариант 1046 *.
  • Сконфигурируйте Тестовую среду с более быстрой сетью, например 3G или 4G
0 голосов
/ 17 сентября 2018

Вы можете попробовать urllib2 , BeautifulSoup для этой проблемы на Pyhton.Ниже приведен пример кода, показывающий, как получить атрибуты элементов страницы из источника страницы.

from BeautifulSoup import BeautifulSoup as BeautifulSoup
import urllib2

page = urllib2.urlopen('yourUrl')
soup = BeautifulSoup(page)
elementsYouWantToExtract = soup.findAll('element tag for instance: "img" ')
for attributeYouWantToExtract in elementsYouWantToExtract:
    print elementsYouWantToSearch['attributeYouWantToExtract']

Надеюсь, это поможет ...

...