提问人:user_bktv_all3103 提问时间:7/30/2023 最后编辑:Ajeet Vermauser_bktv_all3103 更新时间:7/30/2023 访问量:31
如何使用硒获取更改网站的页面源?
How to get a page source of changed website with selenium?
问:
我需要在更改页面后获取页面的源代码,我向页面发送请求,然后页面在我的浏览器中打开,我用手选择一些数据,然后出现一个包含必要数据的表格,经过所有这些操作后,我该如何获取此表格或更改后获取整页代码
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
links=['https://priem.gubkin.ru/#/page/enrollment']
s=Service(executable_path='D:\\university\\geckodriver.exe')
driver = webdriver.Firefox(service=s)
try:
driver.maximize_window()
for i in range(0,len(links)):
driver.get(links[i])
# time.sleep(25)
element = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "tbody")))
with open('GUBKINA.html', 'w') as file:
file.write(element)
except Exception as ex:
print(ex)
finally:
driver.close()
driver.quit()
我试图在等待的帮助下获取此表并找到该表的类,但是程序找不到此元素并写入nosuchelenterror等
答:
0赞
Ned Hulton
7/30/2023
#1
我认为您的问题是您想要的链接在 iFrame 中。尝试这样的事情:
iframe = driver.find_element(By.XPATH, "//iframe") #find the iframe
driver.switch_to.frame(iframe) # go into it
items = driver.find_elements(By.XPATH, "//span") # do stuff
for item in items:
print(unidecode(item.text))
driver.switch_to.default_content() # exit the iframe
我找不到任何具有“tbody”类的元素,但该类的 CSS 在网站上。上面的代码以 unicode 格式打印以下内容:
Spisok abiturientov
Forma obucheniia
Forma obucheniia
Forma obucheniia
评论
0赞
user_bktv_all3103
7/30/2023
我已更改为“element = WebDriverWait(driver, 50).until( EC.presence_of_element_located((By.XPATH,'/html/body/app-root/div/home/mat-card/div[2]'))); ”,但它也不起作用,我看到表格不在 iframe 中,写css_selector是错误的,我写它是因为测试了这段代码,忘记返回元素的正常查找
0赞
Ned Hulton
7/30/2023
这个路径不存在:html/body/app-root/div/home/mat-card/div[2] 至少在我这边。
0赞
Ned Hulton
7/30/2023
此路径确实存在,但它位于 iframe 中:html/body/app-root/div/home
0赞
Andrej Kesely
7/30/2023
#2
我建议另一种方法:使用他们的 Ajax API(他们以 Json 形式获取表数据的 URL):
import requests
import pandas as pd
url = 'https://transfer.priem.gubkin.ru/abiturients_list/api/api.php'
params = {
"act": "search",
"method": "get",
"educationTypeId": "6",
"contestGroupId": "263",
}
data = requests.get(url, params=params).json()
df = pd.DataFrame(data["data"]).explode("ballsBySubjects")
df = pd.concat(
[df, df.pop("ballsBySubjects").apply(pd.Series).add_prefix("bbs_")], axis=1
)
print(df)
指纹:
position snils fio originalExistence originalType individualAchievementsBalls totalBalls needHostel priority entranceBalls benefit isLastPerson orders_before bbs_name bbs_id bbs_ball bbs_priority
0 1 173-112-079 27 None False None None True 2 None False Специальность 17 None 1
1 2 134-581-746 69 None False None None True 1 None False Специальность 17 None 1
2 3 174-629-198 02 None False None None False 2 None False Специальность 17 None 1
切换到“网络”选项卡并填写表单时,在 Web 开发人员工具中找到的参数(屏幕截图):
评论