#python #html #selenium #selenium-webdriver #webdriver
#python #HTML #селен #selenium-webdriver #webdriver
Вопрос:
Я пытаюсь очистить веб-сайт и заставить мою программу знать все кнопки и ссылки, которые находятся внутри этого веб-сайта, но моя проблема в том, что для перехода на первую страницу мне нужно ввести имя пользователя и пароль, а затем очистить страницу, которая отображается после этого, и каждый раз, когда она переходит на страницус паролем и именем пользователя кто-нибудь знает, как это сделать? потому что я не знаю, как это код, который я пробовал:
import requests
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
PATH = "C:Program Files (x86)chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.ronitnisan.co.il/admin/UnPermissionPage.asp?isiframe=")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.NAME, "FirstName"))
)
except:
driver.quit()
userName = driver.find_element_by_name("FirstName")
userName.clear()
userName.send_keys("username")
password = driver.find_element_by_name("UserIDNumber")
password.clear()
password.send_keys("username")
time.sleep(0.5)
login = driver.find_element_by_name("submit")
login.click()
URL = 'https://www.ronitnisan.co.il/admin/UnPermissionPage.asp?isiframe='
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
print(soup)
Ответ №1:
Вы запускаете «сеанс» Chrome (я не знаю, правильное ли это слово для него) вплоть до и включая блок try:
кода. Вы используете этот сеанс для ввода имени пользователя и пароля, пока все хорошо.
Затем вы полностью отказываетесь от этого сеанса и просто используете requests.get()
оператор для получения URL. Этот URL-адрес не содержит никакой информации для входа (либо через файлы cookie сеансов через ваш браузер, поскольку вход в систему был выполнен через driver
переменную.
Человеческий эквивалент этого — войти на веб-сайт с помощью Firefox, а затем попытаться посетить тот же веб-сайт с помощью Edge. Они не будут использовать один и тот же сеанс, и в этом случае вам придется снова войти в Edge.
Возможно, вы захотите попробовать что-то вроде этого (после login.click()
)
soup = BeautifulSoup(driver.page_source, 'lxml')
print(soup)
Комментарии:
1. driver.get переместит его обратно в логин, просто сделайте driver.page_source внутри soup.
2. Хм, я не понял, что это точно такой же URL (для входа и для очистки), хороший улов! Вы правы, вы можете просто получить driver.page_source.
Ответ №2:
Заменить
URL = 'https://www.ronitnisan.co.il/admin/UnPermissionPage.asp?isiframe='
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
print(soup)
с
driver.get (URL)
а затем используйте find_element, чтобы отследить интересующие вас части страницы.
В противном случае вы хотите захватить файлы cookie для использования с запросами.
Ответ №3:
Как насчет этого?
from bs4 import BeautifulSoup
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.accept_untrusted_certs = True
import time
wd = webdriver.Firefox(executable_path="C:/Utility/geckodriver.exe", firefox_profile=profile)
url = "https://the_url"
wd.get(url)
# set username
time.sleep(5)
username = wd.find_element_by_id("FirstName")
username.send_keys("your_id")
#wd.find_element_by_id("identifierNext").click()
# set password
#time.sleep(2)
password = wd.find_element_by_id("Password1")
password.send_keys("your_password")
elements = wd.find_elements_by_class_name("submit")
for e in elements:
e.click()
# wait max 10 seconds until "theID" visible in Logged In page
time.sleep(10)
content = wd.page_source
print(BeautifulSoup(content, 'html.parser'))
file = open('C:\your_path_here\test.txt', 'w', encoding='utf-8')
file.write(content)
file.close()