#python #asp.net #selenium #web-scraping
Вопрос:
Поэтому я пытаюсь наскрести https://www.iob.in/Branch.aspx и хочу перейти на разные страницы и использовал для этого селен. Он хорошо работает на более широком экране, но на более высоких экранах кнопка банкомат/отделение находится над страницами 6/7, и селен не может понять их или прокрутить, чтобы дотянуться. Как-нибудь обойти это или как это исправить? Я попытался запустить в максимальном режиме или установить фиксированный размер окна, но это не решает проблему
options.add_argument("window-size=1900,900")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(
options=options,
)
driver.get("https://www.iob.in/Branch.aspx")
blah = []
for page in range(2, 10):
try:
WebDriverWait(driver, 20).until(
EC.visibility_of_element_located(
(
By.XPATH,
f"//*[@id='ctl00_ContentPlaceHolder1_gv_Branch']/tbody/tr[22]/td/table/tbody/tr/td[{page}]/a",
)
)
).click()
Ответ №1:
Селен не нажимает на элемент, если он не находится в видимой области страницы. Вы можете использовать javascript, чтобы щелкнуть элемент, даже если он не находится в видимой области, например:
driver.implicitly_wait(20) # just an alternate to WebDriverWait, but it's value is set for whole life of the program until you change it
....
for page in range(2, 10):
element = driver.find_element_by_xpath(f"//*[@id='ctl00_ContentPlaceHolder1_gv_Branch']/tbody/tr[22]/td/table/tbody/tr/td[{page}]/a")
driver.execute_script("arguments[0].click()", element) # worked with small screen.
Ответ №2:
если вы просто хотите, чтобы селен отрегулировал высоту страницы, вы можете использовать это:
height = driver.execute_script("return document.body.scrollHeight")
driver.set_window_size(1056, height)