#python #selenium #selenium-chromedriver
#python #selenium #selenium-chromedriver
Вопрос:
Я пытаюсь создать веб-скребок для Linkedin, используя Python и Selenium. Я пытаюсь распечатать заголовок, но на выходе отображается только пустой список, и я не уверен, почему. Я попытался распечатать все элементы в списке и использовать items.text.replace() для замены общих выходных данных, однако на выходе по-прежнему были все элементы. Я также пробовал печатать родительские разделы, но на выходе по-прежнему получается пустой список.
Вот код, который я написал:
#search
driver.find_element_by_xpath("//*[@id='ember16']/input").send_keys("Steve Jobs")
driver.find_element_by_xpath("//*[@id='ember16']/input").send_keys(Keys.RETURN)
driver.implicitly_wait(3)
#result count
resultCount = driver.find_element_by_xpath("//*[@id='ember64']/div/h3")
print("n" str(resultCount.text))
#printing
results = driver.find_elements_by_xpath('//*[@id="ember64"]/div/ul')
for items in results:
print(str(driver.find_elements_by_xpath('//*[@id="ember552"]/div/div[2]/p[1]')) "n")
Вот результат:
About 43,000 results
[]
Process finished with exit code 0
Можно ли как-нибудь указать элемент для печати во время итерации по списку?
РЕДАКТИРОВАТЬ: Вот минимальный воспроизводимый пример этого кода:
# search url
url = 'https://www.linkedin.com/search/results/people/?keywords=Steve Jobsamp;origin=GLOBAL_SEARCH_HEADER'
driver.get(url)
# print job title
results = driver.find_elements_by_xpath('//*[@id="ember64"]/div/ul')
for items in results:
print(driver.find_elements_by_xpath('//*[@id="ember552"]/div/div[2]/p[1]'))
Вот результат:
[]
Process finished with exit code 0
Комментарии:
1. Какую ссылку URL вы используете?
2. @Mike67 Я использую linkedin.com/login Затем он автоматически выполняет вход с помощью .send_keys() и .click(). Ссылка, приведенная выше, — это то, что я ввел в driver.get(), и как только я выполню поиск, я попаду на linkedin.com/search/results/people /…
3. Что выводит driver.find_elements_by_xpath(‘//*[@id=»ember552″]/div/div[2]/p[1]’).text?
4. @arundeepchohan Он печатает пустой список, который будет выглядеть как «[]»
5. @Greg Проверьте последние изменения. Я не включил код входа в пример, потому что счел это ненужным.
Ответ №1:
Попробуйте этот xpath:
results = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.XPATH,"//*[contains(@class,'search-results__list list-style-none')]/li")))
а для заголовка вы можете использовать приведенный ниже xpath вместе с gettext()
//*[contains(@class,'subline-level-1 t-14')]
Содержит(), используемый в xpath для поиска webelement с частичным текстом.
и явное ожидание может использоваться со многими условиями, я использовал одно из них выше. Рекомендуется использовать wait перед поиском любого webelement.
Более подробная информация о selenium wait refhttps://selenium-python.readthedocs.io/waits.html
функции xpath-https://docs.oracle.com/cd/E35413_01/doc.722/e35419/dev_xpath_functions.htm#autoId12
Xpath показывает мне весь список:
Комментарии:
1. Спасибо за ваш ответ, однако он напечатал пустой список в том же выводе, что и раньше. Я новичок в selenium, и я хотел бы знать, что делает contains(). Я предполагаю, что он находит xpath, содержащий это имя класса, но я не слишком уверен.