Попытка получить заголовок веб-сайта, сгенерированного с помощью javascript

#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 /