【问题标题】:Slider button click in selenium python在 selenium python 中单击滑块按钮
【发布时间】:2019-07-05 10:00:50
【问题描述】:

我的问题如下:

我正在训练检索本网站https://www.cetelem.es/上的信息。

我想做几件事:

  • 点击两个滑动按钮更改信息。

  • 获取滑动按钮变化后的信息

  • 放一个条件,只在tin和tae发生变化时检索信息。

我在 google colab 上尝试了以下代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-maximized')
webdriver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = "https://www.cetelem.es/"

webdriver.get(url)
webdriver.find_element_by_class_name("bar-slider importe").send_keys("20.000")
webdriver.find_element_by_class_name("bar-slider messes").send_keys("30")
webdriver.save_screenshot('sreenshot.png')
print(webdriver.find_element_by_tag_name('body').text)

error1

如果你有解决办法,你能解释我的错误吗?因为我是一个真正的爬虫初学者。

【问题讨论】:

    标签: javascript python selenium-webdriver web-scraping selenium-chromedriver


    【解决方案1】:

    这可能不太理想,但您可以使用 +/- 按钮调整滑块,直到击中目标。这是顶部滑块的示例。您还应该将目标的范围限制为 4.000 欧元的下限和 60.000 欧元的上限。

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    chrome_options = webdriver.ChromeOptions()
    # chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument('--start-maximized')
    webdriver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
    url = "https://www.cetelem.es/"
    
    webdriver.get(url)
    targetSliderStep = 22.700
    targetSliderStep = round(targetSliderStep  * 2) / 2  # to ensure is units covered by clicking
    print('target: ' + "{0:.3f}".format(targetSliderStep))
    actualSliderStep = float(webdriver.find_element_by_id('slider-step-value').text.replace(' €',''))
    
    if actualSliderStep < targetSliderStep:
        while float(webdriver.find_element_by_id('slider-step-value').text.replace(' €','')) < targetSliderStep:
            webdriver.find_element_by_css_selector("#slider-step .up-button").click()
    elif actualSliderStep > targetSliderStep:
        while float(webdriver.find_element_by_id('slider-step-value').text.replace(' €','')) > targetSliderStep:
            webdriver.find_element_by_css_selector("#slider-step .down-button").click()
    print('actual: ' + webdriver.find_element_by_id('slider-step-value').text.replace(' €',''))
    

    回答您的其他问题:

    其他滑块:

    对其他滑块使用相同的逻辑(可能添加 12-96 的范围):

    targetTimeStep = 22.700
    targetTimeStep = round(int(targetTimeStep))  # to ensure is units covered by clicking
    print('target: ' + str(targetTimeStep))
    actualTimeStep = int(webdriver.find_element_by_id('slider-time-step-value').text)
    
    if actualTimeStep < targetTimeStep:
        while int(webdriver.find_element_by_id('slider-time-step-value').text) < targetTimeStep:
            webdriver.find_element_by_css_selector("#slider-time-step .up-button").click()
    elif actualTimeStep > targetTimeStep:
        while int(webdriver.find_element_by_id('slider-time-step-value').text) > targetTimeStep:
            webdriver.find_element_by_css_selector("#slider-time-step .down-button").click()
    print('actual: ' + webdriver.find_element_by_id('slider-time-step-value').text)
    

    选择项目:

    您可以通过单击左侧菜单栏,然后​​通过 href 属性值子字符串定位项目链接来获取所有较长的项目列表。

    webdriver.find_element_by_id('showLeft').click()
    webdriver.find_element_by_id('layout_6').click()
    projects = webdriver.find_elements_by_css_selector("[href*='prestamos/prestamo-']")
    print(len(projects))
    

    CSS 选择器:

    我一直使用 CSS 选择器,因为现代浏览器已针对 CSS 进行了优化。

    例如以下,

    #slider-step .up-button 
    

    是具有 id (#) slider-step 的父元素与具有类 (.) up-button 的元素/元素的后代组合。 #id selector.class selector" "descendant combinator,即选择具有该 id 的父级的此类的子级。

    您希望尽可能使用 id 选择器,然后使用类选择器作为更快的选择器。

    如果您在+ 按钮上右键单击检查元素,例如,对于顶部滑块,您将看到以下 HTML:

    您可以清楚地看到 + 的父 id 和子类。

    如果你想练习 css 选择器,下面的 link 很有趣,你可以阅读选择器 here

    【讨论】:

    • 非常感谢。我有一些问题要问你:我如何点击推进 Meses para devolverlo,然后点击 Selecciona tu proyecto 来更改项目?您是如何找到 #slider-step .up-button 的?如果我改变我的网站,我可以适应。最后一个问题,如何找到文档以更好地理解和适应所有网站?非常感谢。
    • 非常感谢。你是天才!
    • 这很奇怪。您是否通过同时查看页面进行了验证?它对我来说运行良好,但我会再次运行它,看看我是否遗漏了什么。
    • 抱歉耽搁了。我打错了(我的错)。底部滑块应在 while 循环中始终引用 targetTimeStep。我忘记更改从顶部滑块复制的代码。对不起!现已编辑。
    • 没关系。很抱歉,花了这么长时间来审查它。感谢您的耐心。
    猜你喜欢
    • 2016-05-31
    • 2021-03-18
    • 1970-01-01
    • 2021-08-27
    • 2020-07-28
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多