【问题标题】:Selenium not sending keys to input fieldSelenium 不向输入字段发送键
【发布时间】:2021-08-29 08:39:00
【问题描述】:

我正在尝试抓取此网址https://www.veikkaus.fi/fi/tulokset#!/tarkennettu-haku

刮擦主要分为三个部分:

  1. 从“Valitse peli”中选择正确的游戏类型
    为此,我想选择“Eurojackpot”
  2. 从变量中设置日期范围。在完整版中,我将根据 12 周范围限制生成日期。现在我只选择了两个足够接近的日期。这个日期范围需要输入到“Näytä tulokset aikaväliltä”下面的两个输入字段中
  3. 我需要点击显示结果按钮。 (标记为“Näytä Tulokset”)

我相信我的代码第 1 部分和第 3 部分是正确的,但我在第 2 部分遇到了问题。由于某种原因,刮板没有将日期发送到元素。我试过clickclear,然后是send_keys。我也尝试先发送key_down(Keys.CONTROL),然后发送send_keys("a"),然后发送send_keys(date),但这些都不起作用。该网站总是回到它加载的日期(当前日期)。

这是我的完整代码:

# -*- coding: utf-8 -*-
"""
Created on Sat Jun 12 12:05:40 2021

@author: Samu Kaarlela
"""
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options

url = "https://www.veikkaus.fi/fi/tulokset#!/tarkennettu-haku"
wd = r"C:\Users\Oppilas\Desktop\EJ prediction\scraper\chromedriver"

chrome_options = Options()
chrome_options.add_argument("--headless")

webdriver = webdriver.Chrome(
    wd,
    options=chrome_options
)

from_date = "05.05.2021"
to_date = "11.06.2021"
    
with webdriver as driver:
    wait = WebDriverWait(driver,10)
    driver.get(url)
    
    game_type_element = driver.find_element_by_css_selector(
        "#choose-game"
    )
    slc = Select(game_type_element)
    slc.select_by_visible_text("Eurojackpot")
    
    
    from_date_element = WebDriverWait(
        driver,
        20).until(
            EC.element_to_be_clickable(
                (
                    By.CSS_SELECTOR,
                    "#date-range div:nth-child(1) input"
                )
        )
    )
            
    
    ActionChains(driver). \
    click(from_date_element). \
    key_down(Keys.CONTROL). \
    send_keys("a"). \
    send_keys(from_date). \
    perform()
    
    print(from_date_element.get_attribute("value"))
    driver.save_screenshot("./image.png")
    driver.close()
    

编辑:

I just realized that when selected the input field goes from #date-range #from-date to #date-range #from-date #focus-visible

【问题讨论】:

    标签: python css selenium web-scraping


    【解决方案1】:

    对我来说,只需做以下工作:

    driver.find_element_by_css_selector('.date-input.from-date').send_keys(from_date)
    ActionChains(driver).send_keys(Keys.RETURN).perform()
    driver.find_element_by_css_selector('.date-input.to-date').send_keys(to_date)
    ActionChains(driver).send_keys(Keys.RETURN).perform()
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多