Python, Selenium: Щелчок по следующей ссылке для l oop? - PullRequest
0 голосов
/ 08 июля 2020

Код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import re
from tabulate import tabulate
import os
import time

class ITADBot:
def __init__(self):
    self.driver = webdriver.Chrome('./chromedriver.exe')

    self.base_url = 'https://www.isthereanydeal.com'

def _nav(self, url):
    self.driver.get(url)
    time.sleep(3)

def scrape(self, connect=False):
    self._nav(self.base_url)
    time.sleep(2)
    
    result_iter = self.driver.find_elements_by_class_name('title')
    for child in result_iter:
        child.find_element_by_xpath("//a[contains(@class, 'noticeable')]").click()
        
        time.sleep(5)
        
        self.driver.back()
        
        time.sleep(4)

bot = ITADBot()
bot.scrape(connect=True)

Только начинаю знакомиться с webdriver и Selenium. Я пытаюсь щелкнуть следующую ссылку в этом списке элементов, но каждый раз, когда l oop выполняет итерацию, он нажимает на первую ссылку.

Как мне перейти на go в следующий элемент?

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Добро пожаловать в SO!

Возможно, я немного не в себе c, но я бы предложил альтернативное решение, учитывая структуру веб-сайта, которую вы пытаетесь очистить. В частности, я бы использовал selenium, чтобы получить все ссылки на игровые страницы, затем я бы oop внутри ссылок и получал бы страницу за страницей с requests (что намного быстрее, чем selenium, и не требуется time.sleep() для загрузки страниц. Наконец, учитывая, что задача особенно проста, я бы избавился от структуры кода класс + функции (даже если она оптимальна с точки зрения pythoni c, Если вы только начали, вы можете go шаг за шагом использовать простой код, а затем добавить функцию, класс и т. д.).

Ниже вы можете найти MWE, который получает все ссылки из ' www.isthereanydeal.com 'и перебирает все полученные ссылки

from selenium import webdriver
import requests

driver = webdriver.Chrome()
driver.get('https://www.isthereanydeal.com')
time.sleep(2)

SCROLL_PAUSE_TIME = 0.5 # scroll each # 

# Get scroll height
last_height = self.driver.execute_script("return document.body.scrollHeight")
## SCROLL DOWN UNTIL IT FINISHES ##
while True: 
    # Scroll down to bottom
    self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)
    # Calculate new scroll height and compare with last scroll height
    new_height = self.driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height: # scroll down until the end 
        break
    last_height = new_height

result_iter = driver.find_elements_by_class_name('noticeable')
links = [x.get_attribute("href") for x in result_iter] # get all game links
driver.close()

for l in links:
    r = requests.get(l) # get the game page
    # DO WHATEVER YOU HAVE TO DO IN THE GAME PAGE #
0 голосов
/ 09 июля 2020
result_iter = self.driver.find_elements_by_xpath("//a[contains(@class, 'noticeable')]")
for child in result_iter:
    child.click()

Обнаружено, только xpath вернет список.

...