无法使用 python 定位日期字段自动化 selenium 的元素

问题描述 投票:0回答:1

我正在尝试在 Expedia.com 上实现自动化 以下是我正在遵循的步骤 前往 Expedia.com

  • 点击“航班”按钮
  • 默认情况下它将设置为往返选项
  • 单击离开并从中选择值
  • 单击“转到”并从中选择值
  • 点击日期

在日期上我无法找到元素。

下面是我的代码。

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()

driver.implicitly_wait(10)

driver.maximize_window()

driver.get("https://www.expedia.com/")

driver.implicitly_wait(10)

//Click on RoundTrip
driver.find_element(By.XPATH,"//span[normalize-space()='Flights']").click()

//Leaving From
leaving_from = driver.find_element(By.XPATH,"//button[@aria-label='Leaving from']")
leaving_from.click()
search_by_city= driver.find_element(By.XPATH,"//input[@id='origin_select']")
search_by_city.click()
time.sleep(10)
search_by_city.send_keys("SFO")
time.sleep(10)
search_by_city.send_keys(Keys.ENTER)

//Going To
going_to = driver.find_element(By.XPATH,"//button[@aria-label='Going to']")
going_to.click()
search_going_to = driver.find_element(By.XPATH,"//input[@id='destination_select']")
search_going_to.click()
time.sleep(10)
search_going_to.send_keys("NYC")
time.sleep(10)
search_going_to.send_keys(Keys.ENTER)

time.sleep(10)

//Dates 
dates = driver.find_element(By.CSS_SELECTOR,"#date_form_field-btn")
dates.click()
time.sleep(10)

这是错误 selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“method”:“css选择器”,“selector”:“#date_form_field-btn”}

请任何人帮助我解决这个错误。

python date selenium-webdriver automation field
1个回答
0
投票

您收到的错误表明 DOM 中不存在具有

id="date_form_field-btn"
的元素,并且如果您手动按照 Selenium 在浏览器中为您模拟的步骤操作,i.e.,如果您转到 https:/ /www.expedia.com/ 并点击“航班”,然后您可以检查页面 (
ctrl
+
shift
+
i
) 或阅读源 html (
ctrl
+
u
),您发现整个 DOM 中确实没有这样的元素。

然而,有两个候选人适合您:

  1. 有一个带有标签
    <button data-stid="uitk-date-selector-input1-default" name="EGDSDateRange-date-selector-trigger" ... >
    的按钮代表 dates 字段,幸运的是,attr
    name
    的特定值仅在 DOM 中出现一次。所以你可以通过以下方式找到日期字段:
dates = driver.find_element(By.CSS_SELECTOR,'button[name="EGDSDateRange-date-selector-trigger"')
dates.click()
  1. DOM 中存在两个 hidden(不可见)
    input
    元素,分别表示行程的开始和结束日期:
  • <input type="hidden" data-stid="EGDSDateRangePicker-StartDate" ...>
    ;和
  • <input type="hidden" data-stid="EGDSDateRangePicker-EndDate" ...>

您可以尝试直接将您想要的值传递给每个人。

© www.soinside.com 2019 - 2024. All rights reserved.