(python)列表索引超出范围-使用硒单击事件 - python

有41个类别复选框,其中12个可见,其余保持隐藏,需要单击显示更多以显示
隐藏的复选框。

此代码
这样做:: 1-循环>> 2单击,如果我>显示更多,单击3复选框

# -*- coding: utf-8 -*-
import time
from selenium import webdriver

driver = webdriver.Chrome(executable_path='C:\\Users\\Compu City\\Desktop\\chromedriver.exe')
driver.get('https://www.amazon.com/international-sales-offers/b/?ie=UTF8&node=15529609011&ref_=nav_navm_intl_deal_btn')
time.sleep(10)
res = driver.execute_script("return document.documentElement.outerHTML")

i=0
while i <= 41 :
    if(i <=12):
        driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > div.a-row.a-expander-container.a-expander-inline-container > a > span').click()
    driver.find_elements_by_css_selector('.a-expander-container .a-checkbox label .a-label')[i].click()
    driver.implicitly_wait(2)
    time.sleep(2)
    i+=1

问题:代码与12个复选框配合良好,然后单击“显示更多”,然后仅在第一个复选框NO.13上单击,然后出现此错误

D:\python neww>aaa.py

DevTools listening on ws://127.0.0.1:59799/devtools/browser/ac2188e0-10e3-493b-9d91-614731f8d135
Traceback (most recent call last):
  File "D:\python neww\aaa.py", line 14, in <module>
    driver.find_elements_by_css_selector('.a-expander-container .a-checkbox label .a-label')[i].click()
IndexError: list index out of range

我搜索了很多有关selution的内容,发现echeckbox无法加载,但是当用.text更改.click()时

我得到了所有复选框标签的名称,所以它们如何不加载

i mage for checkboxes

参考方案

CSS选择器的主要问题,因为HTML具有三种结构

前12个复选框的1个优先结构

单击后显示第一个复选框的2秒显示更多

在显示更多内容后单击第一个复选框时,三分之三会更改所有结构,并将包括所有复选框

(我没有使用第三部分,因为它会使代码很长,我想缩短代码)

所以尝试此代码,单击复选框后,您需要单击清除,所以我认为此代码将很有用

first_part = 12
while first_part <=12:
    #click on category checkbox
    driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > div.a-row.a-expander-container.a-expander-inline-container > span:nth-child({}) > div > label'.format(first_part)).click()
    driver.implicitly_wait(3)
    time.sleep(3)
    #clear filter
    driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > span > div > a').click()
    driver.implicitly_wait(3)
    time.sleep(3)
    #print text of checkbox category
    print(driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > div.a-row.a-expander-container.a-expander-inline-container > span:nth-child({}) > div > label'.format(first_part)).text)
    first_part+=1
second_part = 1
while second_part <= 26:
    #show more
    driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > div.a-row.a-expander-container.a-expander-inline-container > a > span').click()
    driver.implicitly_wait(2)
    time.sleep(2)
    #print text of checkbox category
    print(driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > div.a-row.a-expander-container.a-expander-inline-container > div > span:nth-child({}) > div > label'.format(second_part)).text)
    #click on category checkbox
    driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > div.a-row.a-expander-container.a-expander-inline-container > div > span:nth-child({}) > div > label'.format(second_part)).click()
    driver.implicitly_wait(3)
    time.sleep(3)
    #clear filter
    driver.find_element_by_css_selector('#widgetFilters > div:nth-child(1) > span > div > a').click()
    driver.implicitly_wait(3)
    time.sleep(3)
    second_part+=1

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python:如何从字节中提取特定位? - python

我有一条消息,显示为14 09 00 79 3d 00 23 27。我可以通过调用message[4]从此消息中提取每个字节,例如,这将给我3d。如何从该字节中提取单个8位?例如,如何将24-27位作为单个消息?只需28位? 参考方案 要回答问题的第二部分,您可以使用按位运算来获取特定的位值# getting your message as int i = …

Python:检查是否存在维基百科文章 - python

我试图弄清楚如何检查Wikipedia文章是否存在。例如,https://en.wikipedia.org/wiki/Food 存在,但是https://en.wikipedia.org/wiki/Fod 不会,页面只是说:“维基百科没有此名称的文章。”谢谢! 参考方案 >>> import urllib >>> prin…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…