Получение полного URL для Selenium Automation с помощью оператора Python driver.current_url - PullRequest
1 голос
/ 07 января 2020

Я пытаюсь получить полный URL из адресной строки chrome. Я использую этот код.

import re
from selenium import webdriver

driver = webdriver.Chrome(r'C:\Users\XYZ\Desktop\ABC\chromedriver_win32\chromedriver.exe')  # Optional argument, if not specified will search path.
driver.get('https://www.google.com/maps');
#time.sleep(1) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('India Gate')
driver.find_element_by_css_selector("button[id='searchbox-searchbutton']").click()
currentURL = driver.current_url
print(currentURL)
time.sleep(5)
driver.quit()

Вместо получения полного URL-адреса в адресной строке я получаю только https://google.com/maps

Мне нужен URL-адрес, подобный этому https://www.google.com/maps/place/India+Gate/@28.6337379,77.2060128,15z/data=!4m5!3m4!1s0x390ce2daa9eb4d0b:0x717971125923e5d!8m2!3d28.612912!4d77.2295097

Что я отсутствует? Пожалуйста помоги. Я впервые использую Selenium.

Ответы [ 3 ]

2 голосов
/ 07 января 2020

Чтобы извлечь URL, вам нужно вызвать WebDriverWait для url_contains(), и вы можете использовать следующее решение:


Обновление

В качестве альтернативы вместо url_contains("Gate") можно использовать url_contains("data=") следующим образом:

WebDriverWait(driver, 10).until(EC.url_contains("data="))
1 голос
/ 07 января 2020

Тот же блок кода, предоставленный DebanjanB , сработал, когда я увеличил время ожидания.

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

driver = webdriver.Chrome(r'C:\Users\XYZ\Desktop\ABC\chromedriver_win32\chromedriver.exe')  # Optional argument, if not specified will search path.
driver.get('https://www.google.com/maps');
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "q"))).send_keys("India Gate")
driver.find_element_by_css_selector("button[id='searchbox-searchbutton']").click()
WebDriverWait(driver, 30).until(EC.url_contains("Gate"))
print(driver.current_url)
driver.quit()

Это может быть из-за того, что ваше inte rnet соединение медленное или по другим причинам.

0 голосов
/ 07 января 2020

Исходя из вашего отзыва на мой комментарий, я бы предложил вам следующий фрагмент кода:

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

driver = webdriver.Chrome(r'C:\Users\XYZ\Desktop\ABC\chromedriver_win32\chromedriver.exe')  # Optional argument, if not specified will search path.
driver.get('https://www.google.com/maps');
#time.sleep(1) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('India Gate')
driver.find_element_by_css_selector("button[id='searchbox-searchbutton']").click()
WebDriverWait(driver, 10).until(EC.url_contains("https://www.google.com/maps/place/")) # here you are waiting until url will match your output pattern
currentURL = driver.current_url
print(currentURL)
time.sleep(5)
driver.quit()

PS избегать максимально жестко закодированной паузы

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