Как получить часть текста в Selenium и веб-драйвере, используя Python - PullRequest
2 голосов
/ 11 апреля 2020

Я хочу использовать Selenium и веб-драйвер для сбора части информации. Я хочу поймать следующую информацию:

7197409

enter image description here

Следующий код является их html кодом, я хочу поймать "7197409"

<script type="text/javascript">
  var messageid = 7197409;
  var highlight_id = -1;
  var authorOnly = "N";
  var ftype = 'MB';
  var adsenseFront = '<table width="99%" cellspacing="0" cellpadding="0" style="background-color: #000000; margin-left: auto; margin-right: auto;"><tr><td style="width: 100%; background-color: #F7F3F7;">';
  var adsenseEnd = '</td></tr></table>';
  var Submitted = false;
  var subject = true;
  var HiddenThreads = new Array(26); //Temp variable to save the threads temporary
  var blocked_list = Sys.Serialization.JavaScriptSerializer.deserialize('[]');
  var currentUser = undefined;
  var followList = [];
  var lock = false;
</script>

Я проверил их полный путь xpath /html/body/form/div[5]/div/div/div[2]/div[1]/script/text()

Я использую следующий код для его выполнения.

from datetime import date,datetime
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import numpy as np
import xlrd
import csv
import codecs
import time

url = "https://forumd.hkgolden.com/view.aspx?type=MB&message=7197409"
driver_blank=webdriver.Chrome('./chromedriver')
driver_blank.get(url)
id=driver_blank.find_element_by_xpath("/html/body/form/div[5]/div/div/div[2]/div[1]/script/text()")
print("ID:"+id.text)

driver_blank.close()

Однако я получил следующее сообщение об ошибке. Они сказали, что The result of the xpath expression "/html/body/form/div[5]/div/div/div[2]/div[1]/script/text()" is: [object Text]. It should be an element.

DevTools прослушивает ws: //127.0.0.1: 50519 / devtools / browser / 845d0800-1dd9-4f8a-a847-7d955c8cc5e3 libpng предупреждение: iCCP: чанк cHRM не работает соответствовать sRGB [16136: 16764: 0411 / 213956.920: ОШИБКА: ssl_client_socket_impl. cc (941)] сбой рукопожатия; вернул -1, код ошибки SSL 1, net_error -107 [16136: 16764: 0411 / 213957.351: ОШИБКА: ssl_client_socket_impl. cc (941)] сбой квитирования; вернул -1, код ошибки SSL 1, net_error -107 Traceback (последний вызов был последним): файл ". \ test.py", строка 28, в id = driver_blank.find_element_by_xpath ("/ html / body / form / div [5 ] / div / div / div [2] / div 1 / script / text () ") Файл" C: \ Program Files \ Python37 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py ", строка 394, в find_element_by_xpath вернуть self.find_element (by = By.XPATH, value = xpath) Файл" C: \ Program Files \ Python37 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py ", строка 978, в find_element 'value': value}) ['value'] Файл" C: \ Program Files \ Python37 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py " , строка 321, в исполняемом файле self.error_handler.check_response (response) Файл "C: \ Program Files \ Python37 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py", строка 242, в check_response вызывает исключение_класса (message, screen, stacktrace) selenium.common.exceptions.InvalidSelectorException: Сообщение: недопустимый селектор: результат выражений xpath sion "/ html / body / form / div [5] / div / div / div [2] / div 1 / script / text ()" is: [объект Text]. Это должен быть элемент. (Информация о сеансе: chrome = 80.0.3987.132)

Я хочу задать два вопроса:

  1. Как устранить ошибку?

  2. Как получить только текст 7197409 в том же диапазоне xpath?

Кто-нибудь может мне помочь? Спасибо

1 Ответ

0 голосов
/ 11 апреля 2020

Сначала найдите скрипт WebElement :

div = driver.find_element_by_id("ctl00_ContentPlaceHolder1_view_form")
script = div.find_element_by_tag_name('script')

Получите скрипт Внутренний HTML:

text = script.get_attribute('innerHTML')
print(text)

Найдите строку, содержащую "var messageid" :

line = [l for l in text.split("\n") if "var messageid" in l][0]
print("Line:", line)

Получить номер из строки:

ix_1 = line.find("=")
ix_2 = line.find(";")

number = int(line[ix_1+1:ix_2])
print("Number:", number)

Out (Проверено в Chromium 80.x):

Number: 7197409
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...