python-3.x - Python Selenium 无法使用 xpath 收集元素
问题描述
这是我的 Python 代码
from selenium import webdriver
import time
driver = webdriver.Chrome('/usr/local/bin/chromedriver')
driver.get("https://www.immoweb.be")
elem1 = driver.find_element_by_link_text('FRANCAIS')
elem1.click()
elem2 = driver.find_element_by_link_text('Maisons')
elem2.click()
time.sleep(2)
#searchBar = driver.find_element_by_xpath('//*[@id="localisation"]')
searchBar = driver.find_element_by_name('localisation')
searchbar.send_keys('hello')
我想在“本地化”字段中添加文本,但收到以下错误消息。
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="localisation"]"}
我在其他网站上尝试了完全相同的代码,它工作正常。
解决方案
您的“本地化”输入位于iframe下,这就是您无法找到它的原因
您需要调用WebDriver.switch_to()函数,以便在尝试在其中交互元素之前将上下文更改为上述 iframe。
driver.switch_to.frame("IWEB_IFRAME_ID_SEARCH")
还可以考虑重构您的代码以删除sleep
并改用等待,这将使您的测试更快、更健壮和更可靠。此外,某些元素是使用AJAX 技术加载的,因此即使 Selenium“认为”页面加载完成,它们也可能不会立即可用。
建议的代码修改:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome("/usr/local/bin/chromedriver")
driver.maximize_window()
driver.get("https://www.immoweb.be")
elem1 = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.LINK_TEXT, "FRANCAIS")))
elem1.click()
elem2 = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.LINK_TEXT, "Maisons")))
elem2.click()
driver.switch_to.frame("IWEB_IFRAME_ID_SEARCH")
searchBar = elem2 = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.NAME, "localisation")))
searchBar.send_keys('hello')
driver.quit()
推荐阅读
- javascript - How can i change JSON structure by group variable?
- java - Mapping one object to another with aggregation and grouping
- r - 用 assignInNamespace 覆盖包函数
- spring-boot - Pact testing using random port with jUnit5 and SpringBoot
- xcode - 我找不到我的对象文件夹,或者我没有快速命名它的名称?
- xamarin - 如何在 Xamarin.Forms 的一个平台上隐藏按钮?
- c++ - 在 Android NDK 应用上使用蓝牙扬声器的性能问题
- android - 如果设备上未安装 Google Fit,数据不会同步
- elasticsearch - 在 Elasticsearch 中使用最小子聚合时出现意外结果
- amazon-web-services - Cloudformation S3 bucket principal for Cloudfront