当前位置: 首页 > 知识库问答 >
问题:

亚马逊下一页选项选择。在网页中[重复]

都浩淼
2023-03-14

我正试着在网页上收集亚马逊的产品信息。我有代码,它将打开一个web驱动程序,搜索产品名称,并导航到产品页面的第一页。它只能收集第一页的数据,但如何移动到下一页收集相同的数据。以下是我的代码:

import time
import json
import re
import numpy as np
from bs4 import BeautifulSoup
from selenium import webdriver
import urllib.request
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
import pandas as pd


temp = []


def init_driver():
    driver = webdriver.Chrome(executable_path = "C:\\Users\\Desktop\\chromedriver")
    driver.wait = WebDriverWait(driver, 10)
    return driver


def get_asin(driver):

    driver.get("https://www.amazon.in")
    print ('Getting the URL')
    HTML = driver.page_source
    search_button = driver.find_element_by_id("twotabsearchtextbox")
    search_button.send_keys("Mobiles")
    select_button = driver.find_element_by_class_name("nav-input")
    select_button.click()
    HTML1=driver.page_source
    soup = BeautifulSoup(HTML1, "html.parser")


    styles = soup.find_all('li')
    #print(styles)
    #print(type(styles))
    ASIN=[]
    for link in styles:
        if link.has_attr('data-asin'):
            ASIN.append(link['data-asin'])

    return(ASIN)
    #print(ASIN)


if __name__ == "__main__":
    driver = init_driver()
    ASIN_NO = get_asin(driver)
    #time.sleep(3)
    #print ('opening search page')
    #for i in range(0,len(ASIN_NO)):
        #scrape(driver,ASIN_NO[i])

    print (ASIN_NO)
    time.sleep(5)

我已经尝试了以下两种语法,以显示错误:

select_button = driver.find_element_by_id('pagnNextString')
select_button.click()

日志中的异常

WebDriverException:消息:未知错误:元素…在点(778606)处不可单击。其他元素将收到点击:

select_button = driver.find_element_by_class_name('srSprite pagnNextArrow')
select_button.click()

InvalidSelectorException:消息:无效选择器:不允许复合类名

请用正确的方法帮助。提前感谢。

共有2个答案

齐望
2023-03-14

我认为你必须最大化窗口,因为元素是不可见的,这就是为什么问题元素是不可点击的

driver.maximize_window()

USe 下一个按钮的 x 路径(对于无效的探测器问题)

.//*[@id='nav-search']/form/div[2]/div/input

我对python没有太多的了解。这是java代码在我的系统中运行良好

WebDriver driver=new FirefoxDriver();
driver.get("https://www.amazon.in");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement search_txt=driver.findElement(By.xpath("//*[@id='twotabsearchtextbox']"));
search_txt.sendKeys("Mobiles");
driver.manage().window().maximize();
driver.findElement(By.xpath(".//*[@id='nav-search']/form/div[2]/div/input")).click();
WebElement select_btn=driver.findElement(By.xpath("//*[@id='pagnNextString']"));
select_btn.click();
濮阳振
2023-03-14

要能够单击Next按钮,您可以使用下面的代码:

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

next_button = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "pagnNextString")))
next_button.location_once_scrolled_into_view
next_button.click()

这应该允许您等到按钮出现在页面上,向下滚动到它并成功单击

 类似资料:
  • 我正在尝试使用亚马逊AWS向我的手机发送短信。特别是,我正在使用SNS服务,在创建新订阅的过程中陷入了困境。 抱歉,我的屏幕截图在下拉菜单中无法工作,所以我用手机拍了一张贫民区的照片。 有什么想法吗?

  • 选项页 为了让用户设定你的扩展功能,你可能需要提供一个选项页。如果你提供了选项页,在扩展管理页面 chrome://extensions上会提供一个链接。点击选项链接就可以打开你的选项页。 在manifest中定义你的选项页 { "name": "My extension", ... "options_page": "options.html", ... } 编写你的选项页下面是个

  • 亚马逊云 图 1.20.2.1 - AWS AWS,即 Amazon Web Services,是亚马逊(Amazon)公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务,使用户几乎能够在云中运行一切应用程序:从企业应用程序和大数据项目,到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,能够帮助企业降低 IT

  • 我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件

  • 如果你的程序是有主要组件和附加组件,而主要组件是必选项的话,可以在组件名称 Section "主程序(必选)" SEC01 下面添加以下代码: SectionIn RO 效果如图:

  • 问题内容: 目前,我正在使用此: 它将我重定向到选项值内的位置。但这不能按预期工作。..这意味着如果我单击select的第一个选项,则onChange操作不会运行。我正在考虑使用javascript,但我想您会收到一些更好的建议。因此,如果我单击每个选项将其重定向到它的值,该如何使其起作用? 问题答案: 因为已经选择了第一个选项,所以永远不会触发change事件。添加一个空值作为第一个值,并检查位