Как перебрать несколько URL-адресов и открыть URL-адреса в новых вкладках с помощью chromateriver Селена Python - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь открыть URL, найденный на основе link_text в цикле. Ниже приведена программа, которую я пытаюсь использовать. На самом деле, что происходит, фактически на этой странице у меня есть детали 3 раза, иногда это будет 4 раза (это динамично).

Обновленный код:

from selenium.webdriver.support import ui
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 import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_options=options, executable_path='C:\chromedriver_win32\chromedriver.exe')
driver.maximize_window()
driver.get("https://xxxxxx/blogs/")
if driver.find_element_by_xpath("(//span[@class='ui-datepicker-month'][contains(.,'May')])[1]"):        
    # get the number of details to click
    addr = driver.find_elements_by_link_text('Details')
    urls = [v.get_attribute("href") for v in addr]
    for x in range(1, len(urls) + 1):
        driver.execute_script("window.open();")
        driver.switch_to.window(driver.window_handles[x])
        driver.get(urls[x - 1])`

Вывод:

Работает правильно, откройте все подробности в новых вкладках.

Обновление 2: Согласно коду Дмитрия Т, теперь он работает, открывая все подробности в новых вкладках :) спасибо за помощь. Последнее, что я хотел бы попробовать, это цикл datepicker, я жестко закодировал дату как //span[@class='ui-datepicker-month'][contains(.,'May')])[1]" в мае месяце. Как я могу пройти через это, т.е. нажимать на каждый день означает. нажмите 1 мая, откройте все «подробности» href в каждой новой вкладке, снова перейдите на главный URL, нажмите 2 мая, сделайте то же самое ... откройте все «подробности» href в новых вкладках ... и так далее .. Я я пытаюсь написать код ... сообщить результаты. спасибо вам эксперты.

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вы должны иметь возможность открывать все подробные ссылки в новых вкладках, используя приведенную ниже логику.

driver.get("https://xxxxxx/blogs/")
if driver.find_element_by_xpath("(//span[@class='ui-datepicker-month'][contains(.,'May')])[1]"):
    main_window = driver.current_window_handle
    # get the number of details to click
    addr = len(driver.find_elements_by_xpath("//a[@class='details'][contains(.,'Details')]"))
    # iterate through all the details links  (used the index rather elements list as it may lead to staleeleemnt exception after clicking on the first detiails link)
    for addrNum in range(addr):
        # get the details element based on index
        ele = driver.find_element_by_xpath("(//a[@class='details'][contains(.,'Details')])[" + str (addrNum+1) + "]")
        # get the href of the link
        href = ele.get_attribute('href')
        # open the href in another tab
        driver.execute_script("window.open('" + href +"');")
        # switching to parent window (on safer side)
        driver.switch_to.window(main_window)
1 голос
/ 09 мая 2019
  1. Использование Для цикла для итерации URL-адресов из списка addr
  2. Использование функции get_attribute для извлечения URL-адресаиз веб-элемента

Принимая во внимание приведенные выше подсказки, вам необходимо изменить код, например:

addr = driver.find_elements_by_link_text('Details')
urls = [v.get_attribute("href") for v in addr]
for x in range(1, len(urls) + 1):
    driver.execute_script("window.open();")
    driver.switch_to.window(driver.window_handles[x])
    driver.get(urls[x - 1])

Возможно, вы также захотите рассмотреть возможность повторной реализации теста для использования Page.Шаблон объекта - таким образом будет проще поддерживать его, если вы разделите логику теста из части пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...