程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用硒刮新的弹出窗口?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用硒刮新的弹出窗口??

开发过程中遇到如何使用硒刮新的弹出窗口?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用硒刮新的弹出窗口?的解决方法建议,希望对你解决如何使用硒刮新的弹出窗口?有所启发或帮助;

我试图从单击按钮后出现的弹出框中抓取信息。黄色的“联系方式”按钮会打开一个新窗口,显示一个需要抓取的隐藏电话号码。我尝试点击那个按钮,然后抓取文本,但我无法这样做。

这是链接 image

这是网站的链接: @R_801_10107@s://www.carlist.my/used-cars-for-SALE/mazda/malaysia#1004411695

我在获得第一个电话号码后最初遇到的错误是

SELEnium.common.exceptions.ElementClickInterceptedException:

在尝试单击下一个“联系”按钮之前关闭弹出窗口已解决此错误。 这是我修改后代码:

button = driver.find_elements_by_class_name('LisTing__ctr.btn.btn--large.btn--pri@R_618_11035@.one-whole.btn--large.Js-contact-seller.Js-show-top.Js-contact-seller--jump-phone')

    for j in button:
        driver.execute_script("arguments[0].scrollintoVIEw(true);",j)
        driver.execute_script("arguments[0].click();",j)
        pop_up = driver.find_elemenT_By_class_name('modal.Js-modal-dealer.modal--dealer.modal--dealer-ctr')
        time.sleep(5)

        try:
            dealer_name = pop_up.find_elemenT_By_class_name('LisTing__seller-name.Js-chat-profile-fullname.c-seller-name.u-text-5.u-margin-bottom-none').text
            dealer.append(dealer_Name)
            print(dealer)

            try:
                phone = pop_up.find_elemenT_By_class_name('flexBox__item.one-whole.u-flex__fill').text
                dealer_phoneNo.append(phonE)
                print(dealer_phoneNo)
                driver.find_elemenT_By_class_name('flexBox__item.modal__destroy.b-close.weight--light.Js-modal-destroy').click()
                time.sleep(3)
                whole = driver.find_elemenT_By_tag_name('HTML')
                whole.send_keys(Keys.DOWN + Keys.DOWN + Keys.DOWN + Keys.DOWN + Keys.DOWN)
            except:
                dealer.append('Null')
                dealer_phoneNo.append('Null')
                whole = driver.find_elemenT_By_tag_name('HTML')
                whole.send_keys(Keys.DOWN + Keys.DOWN + Keys.DOWN + Keys.DOWN + Keys.DOWN)
        except:
            pass

这个修改后的代码现在可以正确地抓取电话号码和经销商名称。我有 2 个新问题:

  1. 它为每个“联系”按钮执行两次 和
  2. 向下滚动以抓取其他按钮后,其中一个弹出窗口不显示电话号码。我认为这是一个例外,但“try..catch”没有抓住它。

目前我不知道我应该如何前进。 提前致谢。

解决方法

正如我们在评论中所讨论的,在进行下一件事之前关闭窗口很重要。 与单击第一个之外的内容相关联的滚动视图不起作用。至少在 Firefox 中,当我使用 jsExecute 进行单击时,它不介意您看不到它单击的内容。但是看着有点难看,所以我用向下箭头手动滚动。这是结果。请注意,有些内容有 2 个电话号码,您可能需要处理这些电话号码。

对不起,关于窗把手的红鲱鱼。事实证明,弹出窗口并不是真正独立的。

for j in phone:
    driver.execute_script("arguments[0].click();",j)
    time.sleep(3)
    pop_up = driver.find_elemenT_By_class_name('modal.js-modal-dealer.modal--dealer.modal--dealer-ctr')
    phone = pop_up.find_elemenT_By_class_name('flexbox__item.one-whole.u-flex__fill').text
    print(phonE)
    driver.find_elemenT_By_class_name('flexbox__item.modal__destroy.b-close.weight--light.js-modal-destroy').click()
    time.sleep(3)
    whole = driver.find_elemenT_By_tag_name('html')
    whole.send_keys(Keys.DOWN+Keys.DOWN + Keys.DOWN + Keys.DOWN + Keys.DOWN)

更新正如您所指出的,上面是点击每个联系人两次。这是该页面的一个特定功能,您的定位器将每个联系人按钮匹配两次。所以我选择了它并交替使用。同时,我遇到的另一个问题是有一个没有电话号码的联系人,这导致了错误(我看到您添加了 try catch 来处理该问题)。这就是为什么我在尝试从中获取文本之前添加了检查是否存在任何匹配项。最后,我去掉了向下的箭头,它既奇怪又不精确,并在执行点击之前执行滚动进入视图。这是在为我滚动它们,我看到你也这样做了

这就是我最终的结果。你可以修改上面修改过的代码来做同样的交替。

i = 0
for j in button:
    i = i + 1
    if (i % 2 == 0):
        conTinue
    driver.execute_script("arguments[0].scrollIntoView()",j)
    driver.execute_script("arguments[0].click();",j)
    time.sleep(5)
    pop_up = driver.find_elemenT_By_class_name('modal.js-modal-dealer.modal--dealer.modal--dealer-ctr')
    phones = pop_up.find_elements_by_class_name('flexbox__item.one-whole.u-flex__fill')
    if len(phones) > 0:
        phone = pop_up.find_elemenT_By_class_name('flexbox__item.one-whole.u-flex__fill').text
        print(phonE)
    driver.find_elemenT_By_class_name('flexbox__item.modal__destroy.b-close.weight--light.js-modal-destroy').click()
    time.sleep(3)

我认为是最终更新:
你是对的,如果电话号码没有出现, try..except 会发现错误。您只需要通过关闭弹出窗口来恢复它。下面是这种方法的样子(我去掉了一些我在测试中没有声明的东西)。我也去掉了向下的箭头,并保持了上面解释的交替。

buttons = driver.find_elements_by_class_name('lisTing__ctr.btn.btn--large.btn--pri@R_618_11035@.one-whole.btn--large.js-contact-seller.js-show-top.js-contact-seller--jump-phone')
i = 0
for button in buttons:
    i = i + 1
    if (i % 2 == 0):
        conTinue
    driver.execute_script("arguments[0].scrollIntoView(true);",button)
    driver.execute_script("arguments[0].click();",button)
    time.sleep(3)
    pop_up = driver.find_elemenT_By_class_name('modal.js-modal-dealer.modal--dealer.modal--dealer-ctr')
    #dealer name never missing,so simplified
    dealer_name = pop_up.find_elemenT_By_class_name('lisTing__seller-name.js-chat-profile-fullname.c-seller-name.u-text-5.u-margin-bottom-none').text
    print(dealer_Name)
    try:
        phone = pop_up.find_elemenT_By_class_name('flexbox__item.one-whole.u-flex__fill').text
        print(phonE)
    except:
        print("missing phone")
    finally:
        driver.find_elemenT_By_class_name('flexbox__item.modal__destroy.b-close.weight--light.js-modal-destroy').click()
        time.sleep(3)

  

大佬总结

以上是大佬教程为你收集整理的如何使用硒刮新的弹出窗口?全部内容,希望文章能够帮你解决如何使用硒刮新的弹出窗口?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。