Как исправить цикл и щелкнуть каждый элемент - PullRequest
0 голосов
/ 06 мая 2019

Я использую Windows 10 и Python 3, и мне нужно щелкнуть первый элемент и обратно и снова щелкнуть 2-й и обратно еще раз, а затем щелкнуть 3,4,5 элементов, чтобы до конца.

Яиспользуя этот код, и он возвращает только первый элемент.

import csv
from parsel import Selector
from time import sleep
from selenium import webdriver


driver = webdriver.Chrome()

driver.get('https://startup-days-2019.events.startupinvest.ch/participants')

sel = Selector(text=driver.page_source)

lists = sel.xpath('//*[@class="ReactVirtualized__Grid__innerScrollContainer"]/div//@style').extract()


while True:
    driver.get('https://startup-days-2019.events.startupinvest.ch/participants')
    sleep(5)

    sel = Selector(text=driver.page_source)

    lists = sel.xpath('//*[@class="ReactVirtualized__Grid__innerScrollContainer"]/div//@style').extract()
    try:
        for lss in lists:
            ss='//*[@style="%s"]'%lss
            # ss='//*[@style="height: 130px; left: 0px; position: absolute; top: 130px; width: 100%;"]'

            driver.find_element_by_xpath(ss).click()
            sleep(5)
    except:
        pass

Пожалуйста, проверьте код.Мы ожидаем, что результаты будут щелкать по каждому элементу и получить подробную информацию обо всех перечисленных данных

Спасибо

1 Ответ

0 голосов
/ 06 мая 2019

Вы можете использовать и получать всю информацию в формате json. Измените значение pageSize с 25 на 338 и получите всех участников за один запрос.

import requests

response = requests.get('https://startup-days-2019.events.startupinvest.ch/api/v2/events/3778/participants:search?pageSize=25&view=1&filter.query=&order_by=')

# to get response in text format, use response.text

participants = response.json()["participants"]
for participant in participants:
    first_name = participant["user"]["first_name"]
    last_name = participant["user"]["last_name"]
    organisation_name = participant["organisation_name"]

    print(s"name: {first_name} {last_name}, organisation: {organisation_name}")

Чтобы получить, вам нужно сначала прокрутить и собрать все href:

from selenium.common.exceptions import StaleElementReferenceException
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


base_url = "https://startup-days-2019.events.startupinvest.ch"
driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)

driver.get(base_url + "/participants")
size = int(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".opportunities-count-number"))).text)

participants = []
while len(participants) < size:
    participant_cards = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".participants-main-container a")))
    for card in participant_cards:
        try:
            href = card.get_attribute("href")
            if href not in participants:
                participants.append(href)
        except StaleElementReferenceException:
            pass

    driver.execute_script("arguments[0].scrollIntoView();", participant_cards[len(participant_cards)-1])

for participant in participants:
    driver.get(participants)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...