python - Selenium 并与搜索栏交互
问题描述
嗨,我是 selenium 的新手,但试图在 angel.co 上自动搜索但没有成功!单击时搜索框元素会发生变化,我很难让 selenium 能够拾取元素来做事。本质上,我想在框中输入增长黑客并进行搜索。您必须首先单击该框,输入搜索词,然后按 Enter。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.get("https://angel.co/jobs")
time.sleep(5)
WebDriverWait(driver,20).until(EC.visibility_of_element_located
((By.XPATH,"//[@id='main']/div/div[5]/div[2]/div/div[2]/div[1]/div[1]/
button/div")))
element = driver.find_element_by_xpath('//*[@id="main"]/div/div[5]/div[2]/div/div[2]/div[1]/div[1]/button/div')
driver.execute_script("arguments[0].innerText = 'Growth Hacker';",element)
time.sleep(5)
element.send_keys(Keys.RETURN')
我可以将Growth Hacker 输入到框中,但不能像所有搜索词在此搜索框中那样使其成为标签。
任何帮助将非常感激。
更新
我已经设法将文本插入到框中,但由于某种原因,我似乎无法让它在搜索框中变成带有正确文本的标签。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.get("https://angel.co/jobs")
WebDriverWait(driver,60).until(EC.element_to_be_clickable((By.XPATH,'//span[@class="label_82eab"]')))
element4 = driver.find_element_by_xpath('//span[@class="label_82eab"]')
time.sleep(5)
driver.execute_script("arguments[0].innerText='Edinburgh';",element4)
time.sleep(5)
WebDriverWait(driver,60).until(EC.element_to_be_clickable((By.XPATH,'//span[@class="label_82eab"]')))
driver.find_element_by_xpath('//span[@class="label_82eab"]').click()
解决方案
所以我尝试了自己的方式并且能够搜索输入的结果,您可以尝试代码并查看它是否是您想要的,因为您的问题足够清楚。据我了解,您在搜索在我的代码中运行良好的文本字段时遇到了困难。试试看,如果我能帮上忙,请告诉我!
如果你不熟悉 selenium 和 classes,你总是可以在没有 classes 的情况下编写代码!
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class Angel(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome("change to ur chrome driver")
self.driver.implicitly_wait(30)
def test_angel(self):
driver = self.driver
driver.get("https://angel.co/")
driver.find_element_by_id("search").click()
time.sleep(3)
driver.find_element_by_id("search").clear()
time.sleep(3)
driver.find_element_by_id("search").send_keys("Growth Hacker")
time.sleep(3)
driver.find_element_by_id("search").send_keys(Keys.ENTER)
time.sleep(3)
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
推荐阅读
- c# - C#:如何通过 REST 控制器使用 StreamContent?
- java - java - 如何用java将超过5个txt文件合并到1个文件中?
- android - .apk 文件以 .zip 格式发送
- arrays - 将数组作为 Haskell 函数的输入
- selenium - 使用 selenium 测试 stripe.redirectToCheckout
- c - 这是访问功能的正确方法吗?
- amazon-web-services - 如何使用 Terraform 为托管规则添加范围
- javascript - 从下拉列表中获取动态调用 api 的数据
- azure - Purview 是否显示 ADF 管道通过数据流自动创建的表的沿袭?
- ruby-on-rails - Rails 管理员:下拉条目太多