#python #selenium
#python #selenium
Вопрос:
Когда я загружаю веб-сайт, его заголовок «Loading …» в течение секунды, пока он не изменится на другой заголовок, полученный с помощью javascript. В python я пытаюсь получить сгенерированный заголовок.
Я пробовал использовать selenium и PhantomJS, но столкнулся с рядом проблем.
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='/usr/local/lib/phantoms/bin/phantomjs')
driver.get(www.google.com)
p_element = driver.find_element_by_id(id='intro-text')
print(p_element.text)
Здесь говорится, что поддержка PhantomJS устарела, поэтому я не уверен, что еще можно сделать, или есть ли более простой способ получить нужный мне результат.
Комментарии:
1. PhantomJS устарел, используйте Chrome или Firefox, в последних версиях оба имеют безголовые режимы
Ответ №1:
Используйте что-то вроде Firefox или Chrome, а затем используйте свойство title драйвера
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.google.com")
print(driver.title)
Если заголовок кратко показывает «Загрузка …», то вы можете зацикливать получение заголовка до тех пор, пока он больше не будет показывать «Загрузка ….»
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.google.com")
while driver.title == 'Loading...': //Should loop here until title changes
pass
print(driver.title)
Мой python устарел, но это должно быть близко.
Комментарии:
1. Спасибо за ответ. Что я получаю при этом, так это «while driver.title == ‘Loading …’ недопустимый синтаксис»
2. Ржавый python…. Добавьте двоеточие в конце, а в строке под отступом добавьте пропуск. Я обновил свой ответ.
3. Это работает отлично, поскольку добавлена опция браузера без заголовка и исполняемый файл geckodriver. Однако у меня есть пара вопросов. Каков наилучший способ добавить больше URL-адресов вместо одного? И время, необходимое для возврата заголовка, немного замедляется. Это не имеет большого значения, но есть ли реальный способ ускорить это?
4. Вы могли бы использовать переменную для URL, по которому хотите перейти, а затем просто передать это в driver.get (someVariable). Вы могли бы поместить это в некоторый цикл, в котором вы читаете из файла данных, таким образом, цикл foreach просматривает содержимое и считывает ожидаемый URL и заголовок и проделывает с этим то же самое, что указано выше. Сложно дать конкретные данные, не зная точно, что вы хотите сделать.
5. Если вы сочли мой ответ полезным, пожалуйста, выберите его в качестве ответа. Это помогает всем нам повысить наш рейтинг репутации. Спасибо!
Ответ №2:
Вы можете использовать ожидание, несколько примеров здесь https://www.toolsqa.com/selenium-webdriver/wait-commands /