Что я пытаюсь сделать
открыть URL,
прочитать текстовый файл взять идентификатор продукта из файла один за другим,
введите это в поле ввода поиска на веб-странице,
нажмите на кнопку поиска,
узнать все доступные ссылки поставщиков на странице,
открыть ссылки всех поставщиков в новых вкладках,
запишите эти URL в файл.
Что я пробовал:
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
options.add_argument("user-data-dir=d:\\abprofile")
driver = webdriver.Chrome(chrome_options=options, executable_path='C:\chromedriver_win32\chromedriver.exe')
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("https://xxxxxx/products")
elem = driver.find_element_by_xpath("//input[@id='search']")
main_window = driver.current_window_handle
with open('d:/ids.txt') as in_file:
for ids in in_file:
elem.send_keys(ids)
driver.switch_to.window(main_window)
elem = driver.find_element_by_xpath("//button[contains(@id,'search')]").click()
addr = len(driver.find_elements_by_xpath("(//a[contains(.,'Available Vendors')])"))
for addrNum in range(addr):
ele = driver.find_element_by_xpath("(//a[contains(.,'Available Vendors')])[" + str(addrNum + 1) + "]")
href = ele.get_attribute('href')
driver.execute_script("window.open('" + href + "');")
time.sleep(4)
for handle in driver.window_handles:
if handle != main_window:
print(handle)
page = handle
driver.switch_to.window(page)
time.sleep(7)
element = driver.find_element_by_xpath("//a[contains(.,'Verfiy quotes')]").click()
print(driver.current_url)
urls = driver.current_url
print (urls)
with open('d:/somefile.txt', 'a') as the_file:
the_file.write(urls+"\n")
driver.switch_to.window(main_window)
Но он не работает, когда я отправляю идентификаторы из файла, говорящие
no such element: Unable to locate element:
{"method":"xpath","selector":"//button[contains(@id,'search')]"}
Но когда я жестко кодирую только один идентификатор продукта, как показано ниже, тогда он работает
рабочий:
elem.send_keys("34564545666")
Не работает:
with open('d:/ids.txt') as in_file:
for ids in in_file:
elem.send_keys(ids)
driver.switch_to.window(main_window)
elem = driver.find_element_by_xpath("//button[contains(@id,'search')]").click()
любое предложение, что не так ...