#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