Проблема очистки веб-страниц в Python, веб-страница не загружается вовремя - PullRequest
0 голосов
/ 31 октября 2018

Я создаю программу для удаления мобильных телефонов с сайтов Amazon, но моя программа дает мне исключение тайм-аута даже после того, как страница загружена вовремя.
Вот мой код

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

    from bs4 import BeautifulSoup
    import urllib.request

    class Amazon_all_mobile_scraper:
        def __init__(self):
            self.driver = webdriver.Firefox()
            self.delay = 60
            self.url = "https://www.amazon.in/mobile-phones/b/ref=sd_allcat_sbc_mobcomp_all_mobiles?ie=UTF8&node=1389401031"

        def load_amazon(self):
            self.driver.get(self.url)
            try:
                wait = WebDriverWait(self.driver,self.delay)
                        wait.until(EC.presence_of_element_located((By.CLASS_NAME,"acs-ln-link")))
                print("Page is ready.")
            except TimeoutException:
                print("Took too much time to load!")
            except:
                print("Something went wrong in loading part!!")

        def extract_list_of_mobiles(self):
            try:
                mobile_list = self.driver.find_element_by_xpath('//div[@class = "acs-ln-link"]')
                print(mobile_list)
            except NoSuchElementException:
                print("Sorry, Unable to get the requested element")


    scraper = Amazon_all_mobile_scraper()
    scraper.load_amazon()
    scraper.extract_list_of_mobiles()


Пожалуйста, помогите мне выяснить, что не так в этом коде.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Только изменение с acs-ln-link на acs-ln-links не сработает. Ваш xpath должен выглядеть как '//div[contains(@class,"acs-ln-nav-expanded")]//*[@class="acs-ln-links"]//a'. Это, однако, вы можете справиться, чтобы получить необходимый вывод:

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

class Amazon_all_mobile_scraper:

    url = "https://www.amazon.in/mobile-phones/b/ref=sd_allcat_sbc_mobcomp_all_mobiles?ie=UTF8&node=1389401031"

    def __init__(self):
        self.driver = webdriver.Chrome()
        self.wait = WebDriverWait(self.driver, 15)

    def load_n_get_from_amazon(self):
        self.driver.get(self.url)
        mobile_list = self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[contains(@class,"acs-ln-nav-expanded")]//*[@class="acs-ln-links"]//a')))
        return mobile_list

    def __del__(self):
        self.driver.close()

if __name__ == '__main__':
    scraper = Amazon_all_mobile_scraper()
    for item in scraper.load_n_get_from_amazon():
        print(f'{item.text}\n{item.get_attribute("href")}\n')
0 голосов
/ 31 октября 2018

Класс, не соответствующий "acs-ln-link", должен быть "acs-ln-links".

...