首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法单击/选择selenium中的单选按钮

无法单击/选择selenium中的单选按钮
EN

Stack Overflow用户
提问于 2022-06-14 06:22:55
回答 2查看 189关注 0票数 1

我正试着从'https://www.velocityap.com/product/3-0l-v6-supercharged-jaguar-land-rover-aj126-ecu-tuning/‘网站上抓取数据。为此,需要单击一组单选按钮,以显示需要刮掉的汽车部件的价格(下图红色标记的价格)。

我编写的代码如下所示:

代码语言:javascript
复制
options_panel_4 = driver.find_elements(By.CSS_SELECTOR,'div.summary.entry-summary > div.mspc-wrapper.mspc-clearfix.mspc-module-accordion.mspc-auto-next.mspc-step-by-step > div > div:nth-child(8) > div > div')
                print('Options under options panel 3 :', len(options_panel_4))

                for option_4 in options_panel_4:
                    driver.execute_script("arguments[0].scrollIntoView();", option_4)
                    option_4.find_element(By.CSS_SELECTOR, 'div > div.mspc-radio.ui.radio.checkbox > input[type=radio]').click()

然而,它抛出的异常如下:

代码语言:javascript
复制
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <div class="mspc-radio ui radio checkbox">...</div> is not clickable at point (890, 14). Other element would receive the click: <div class="infinite-navigation infinite-item-pdlr clearfix infinite-navigation-submenu-indicator ">...</div>
  (Session info: chrome=102.0.5005.115)
Stacktrace:
0   chromedriver                        0x00000001024162c9 chromedriver + 5120713
1   chromedriver                        0x00000001023a4e33 chromedriver + 4656691
2   chromedriver                        0x0000000101f94158 chromedriver + 393560
3   chromedriver                        0x0000000101fd0638 chromedriver + 640568
4   chromedriver                        0x0000000101fce1b3 chromedriver + 631219
5   chromedriver                        0x0000000101fcb814 chromedriver + 620564
6   chromedriver                        0x0000000101fca5b2 chromedriver + 615858
7   chromedriver                        0x0000000101fbe249 chromedriver + 565833
8   chromedriver                        0x0000000101fe6482 chromedriver + 730242
9   chromedriver                        0x0000000101fbdb05 chromedriver + 563973
10  chromedriver                        0x0000000101fe658e chromedriver + 730510
11  chromedriver                        0x0000000101ff8f41 chromedriver + 806721
12  chromedriver                        0x0000000101fe6373 chromedriver + 729971
13  chromedriver                        0x0000000101fbc609 chromedriver + 558601
14  chromedriver                        0x0000000101fbd635 chromedriver + 562741
15  chromedriver                        0x00000001023e8b1d chromedriver + 4934429
16  chromedriver                        0x00000001023ed295 chromedriver + 4952725
17  chromedriver                        0x00000001023f23cf chromedriver + 4973519
18  chromedriver                        0x00000001023edcba chromedriver + 4955322
19  chromedriver                        0x00000001023c837c chromedriver + 4801404
20  chromedriver                        0x0000000102407c68 chromedriver + 5061736
21  chromedriver                        0x0000000102407def chromedriver + 5062127
22  chromedriver                        0x000000010241d5e5 chromedriver + 5150181
23  libsystem_pthread.dylib             0x00007ff80f3874e1 _pthread_start + 125
24  libsystem_pthread.dylib             0x00007ff80f382f6b thread_start + 15
EN

回答 2

Stack Overflow用户

发布于 2022-06-14 09:45:04

错误代码告诉您的是,问题是当您向下滚动时,顶部菜单将覆盖无线电输入。所以,如果它在哪里点击它,它就不会点击收音机--它会点击菜单。

另外,它不允许您选择收音机本身,您必须选择一个特定的div,下面是这个/html/body/div3/div/div4/div2/div/div2/div2/div2/div/div4/div/div2的xpath

我做了一个快速尝试,手动滚动并手动选择前面的单选按钮,它正确地选择了最后一个有问题的地方,下面是代码:

代码语言:javascript
复制
import time
from selenium import webdriver

driver = webdriver.Chrome(executable_path = "chromedriver.exe")
driver.get("https://www.velocityap.com/product/3-0l-v6-supercharged-jaguar-land-rover-aj126-ecu-tuning/")
options_panel_4 = driver.find_elements_by_css_selector('div.summary.entry-summary > div.mspc-wrapper.mspc-clearfix.mspc-module-accordion.mspc-auto-next.mspc-step-by-step > div > div:nth-child(8) > div > div')
time.sleep(15)

                
print('Options under options panel 3 :', len(options_panel_4))

for option_4 in options_panel_4:
    option_4.find_element_by_xpath('/html/body/div[3]/div/div[4]/div[2]/div/div[2]/div[2]/div[2]/div/div[4]/div/div[2]').click()

我使用xpath是因为我预先准备了它,但这并不意味着您也必须这样做。我还添加了等待加载的等待时间,并选择了前面的单选按钮。

票数 1
EN

Stack Overflow用户

发布于 2022-06-14 08:42:56

由于您希望获得所有产品的数据,所以我将获得所有的复选框的xpath,例如‘// get @type=“radio”和@value=“jaguar-f-type-”。当我拥有所有的xpath时,我将执行一个脚本来选择所有的选项,并且我将完成这个xpath '//*@class="price"/descendant::span@class="woocommerce-Price-amount数量的文本“‘

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72612343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档