Вы можете использовать селектор атрибута = значение для нацеливания на href
. В этом случае я использую подстроку в конце с помощью оператора содержимого (*
).
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[href*=ctl08]'))).click()
Я добавляю в ожидании кликабельного состояния в качестве меры предосторожности. Вы могли бы, вероятно, удалить это.
Дополнительный импорт
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
Без условия ожидания:
browser.find_element_by_css_selector('[href*=ctl08]'),click()
Другой способ:
Теперь вместо этого вы может изначально установить счетчик результатов страницы равным 100 (максимум), а затем перебрать выпадающий список страниц результатов для загрузки каждой новой страницы (тогда вам не нужно работать над количеством страниц)
import requests, re
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
url ='http://jobquest.detma.org/JobQuest/Training.aspx'
browser.get(url)
submit_button = browser.find_element_by_id('ctl00_ctl00_bodyMainBase_bodyMain_btnSubmit')
submit_button.click()
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[value="100"]'))).click()
html = browser.page_source
soup = BeautifulSoup(html, "html.parser")
rows = soup.find_all("tr",{"class":"gvRow"})
id_list=[]
for row in rows:
temp = str(row.find("a"))[33:40]
id_list.append(temp)
elems = browser.find_elements_by_css_selector('#ctl00_ctl00_bodyMainBase_bodyMain_egvResults select option')
i = 1
while i < len(elems) / 2:
browser.find_element_by_css_selector('#ctl00_ctl00_bodyMainBase_bodyMain_egvResults select option[value="' + str(i) + '"]').click()
#do stuff with new page
i+=1
[ 1113] Вы сами решаете, что делать с извлечением информации о строках с каждой страницы. Это должно было дать вам простую структуру для зацикливания всех страниц.
Я нашел, что xmlstarlet довольно хорош в этом виде вещи.
http://xmlstar.sourceforge.net/
Должен быть доступным в большинстве репозиториев дистрибутива, также. Вводное учебное руководство здесь:
JEdit имеет плагин под названием "XQuery", который обеспечивает запросы функциональности для XML-документов.
Не совсем командная строка, но это работает!
XQuery мог бы быть хорошим решением. Это (относительно) легко изучить и является стандартом W3C.
я рекомендовал бы XQSharp для процессора командной строки.
Зависит от точно, что Вы хотите сделать.
XSLT может быть способом пойти, но существует кривая обучения. Попробуйте xsltproc и обратите внимание, что можно вручить параметры.
Некоторые многообещающие инструменты:
nokogiri: парсинг DOMS HTML/XML в рубине с помощью XPath & селекторы CSS
hpricot: удержанный от использования
fxgrep: Использует его собственный подобный XPath синтаксис для запросов документов. Записанный в SML, таким образом, установка может быть трудной.
LT XML: инструментарий XML получен из инструментов SGML, включая sggrep
, sgsort
, xmlnorm
и другие. Использует его собственный синтаксис запроса. Документация очень формальна. Записанный в C. LT XML 2 требует поддержки XPath, XInclude и других стандартов W3C.
xmlgrep2: простой и мощный поиск с XPath. Записанный в Perl с помощью XML:: LibXML и libxml2.
XQSharp: Поддержки XQuery, расширение XPath. Записанный для Платформы.NET.
xml-coreutils: инструментарий Laird Breyer, эквивалентный GNU coreutils. Обсужденный в интересном эссе на том, что должен включать идеальный инструментарий.
xmldiff: Простой инструмент для сравнения двух xml файлов.
xmltk: кажется, не имеет пакет в debian, человечности, мягкой фетровой шляпе, или macports, не имел выпуска с 2007 и использует непортативную автоматизацию сборки.
xml-coreutils кажется лучшим, зарегистрированным и наиболее ориентированным на UNIX.
К превосходному списку Joseph Holsten я добавляю xpath сценарий командной строки, который идет с библиотекой Perl XML:: XPath. Отличный способ извлечь информацию из XML-файлов:
xpath -q -e '/entry[@xml:lang="fr"]' *xml
-q -e
опции. Пример, получите атрибут " package" значение от " manifest" узел в " AndroidManifest.xml": xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
– antonj
01.10.2019, 19:14