использование селена для отображения «следующих» результатов поиска с использованием ссылок jscript _doPostBack

Временные метки всплывающих окон в ObjectIds подробно описывают запросы, основанные на датах, встроенных в ObjectId.

Коротко в JavaScript-коде:

// This function returns an ObjectId embedded with a given datetime
// Accepts both Date object and string input

function objectIdWithTimestamp(timestamp) {
    // Convert string date to Date object (otherwise assume timestamp is a date)
    if (typeof(timestamp) == 'string') {
        timestamp = new Date(timestamp);
    }

    // Convert date object to hex seconds since Unix epoch
    var hexSeconds = Math.floor(timestamp/1000).toString(16);

    // Create an ObjectId with that hex timestamp
    var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");

    return constructedObjectId
}


// Find all documents created after midnight on May 25th, 1980
db.mycollection.find({ _id: { $gt: objectIdWithTimestamp('1980/05/25') } });

0
задан dz12345 4 March 2019 в 16:21
поделиться

1 ответ

Вы можете использовать селектор атрибута = значение для нацеливания на 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] Вы сами решаете, что делать с извлечением информации о строках с каждой страницы. Это должно было дать вам простую структуру для зацикливания всех страниц.

0
ответ дан QHarr 4 March 2019 в 16:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: