Введите в скрытое текстовое поле и нажмите enter (Selenium, Python)

#python #selenium #xpath

#python #selenium #xpath

Вопрос:

Я пытаюсь ввести текстовую строку « L62T18H029-P3215 » в поле ввода поиска на этом веб-сайтеhttps://lamerfashion.com и нажмите Enter.

Я попытался выполнить некоторые, javascript чтобы изменить значение скрытого элемента, однако я не могу заставить Selenium отправить клавишу ВВОДА для отправки.

 driver = webdriver.Chrome(ChromeDriver)

driver.get("https://lamerfashion.com")

element = WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH, '//a[@class="search-icon"]')))

element.click()

e = driver.execute_script("return document.getElementsByName('type')[0].value;")

print(e)

driver.execute_script("document.getElementsByName('type')[0].value='L62T18H029-P3215';")

e = driver.execute_script("return document.getElementsByName('type')[0].value;")

print(e)
  

Вывод:

 product

L62T18H029-P3215
  

Ответ №1:

Я запускаю скрипт на Java, возможно, это поможет вам .. Попробуйте это (для справки)

 WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://lamerfashion.com");

WebElement newSearch = driver.findElement(By.className("search-icon")););
newSearch.click();
Thread.sleep(1000);
WebElement searchpro = driver.findElement(By.xpath("//*[@id="navbar"]/div/ul[2]/li[1]/form/input[2]"));

searchpro.sendKeys("L62T18H029-P3215");
searchpro.sendKeys(Keys.ENTER);
  

Комментарии:

1. Ваш Xpath выглядит ужасно. Это также очень нестабильно. Хотя OP запрашивает помощь в python. Табуляция также не нужна.

2. хорошо, я отредактирую код, но я уже упомянул «Я запускаю скрипт на Java», и для логики я дал ответ.

3. Я согласен с ответом @PradnyaBolli, за исключением части xpath. Совсем не обязательно использовать JS для обхода скрытого элемента. Просто нажав на значок поиска, откроется окно ввода поля поиска, в котором можно легко выполнить отправку ключей.

4. @PradnyaBolli Вам нужно удалить Thread.sleep() и предложить ввести WebDriverWait

5. @DebanjanB да, вы правы.. Я читал о том, «что лучше использовать Thread или WebDriverWait ?» и «WebDriverWait» всегда лучше использовать. Спасибо за предложение..

Ответ №2:

Я не вижу здесь никакой необходимости в JS.
Вы можете просто использовать send_keys метод, который уже присутствует в selenium.

Код :

 driver = webdriver.Chrome(executable_path = r'chromedriverpath')
wait = WebDriverWait(driver,10)

driver.maximize_window()

driver.get("https://lamerfashion.com")

wait = WebDriverWait(driver, 10)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.search-icon'))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@class='search-icon']/following-sibling::form/input[@name='q']"))).send_keys("L62T18H029-P3215")  
  

импортирует :

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
  

Комментарии:

1. Это работает ^^. Не могли бы вы объяснить мне, что делает часть xpath «/ following-sibling::form»?

2. Следующий-родственный означает, что вы хотите выбрать следующий узел из текущего узла с тем же родителем.

Ответ №3:

На веб-сайте есть два входа, и тот, у которого есть hidden, на самом деле может быть не тем, который вам нужен.

Попробуйте то же самое, но для имени «q»

Кроме того, попробуйте использовать команду Selenium

element.send_keys('text_you_want') — этого должно быть достаточно, прежде чем использовать JS