Щелкните любой из 1 2 3 4 5 на странице с помощью Selenium в Python (например, Splinter):

У меня есть HTML, который выглядит как три следующих примера операторов:

<a href="javascript:__doPostBack('ctl00$FormContent$gvResults','Page$10')">...</a>

<a href="javascript:__doPostBack('ctl00$FormContent$gvResults','Page$12')">12</a>

<a href="javascript:__doPostBack('ctl00$FormContent$gvResults','Page$13')">13</a>

(Сейчас я был бы на стр. 11.)

Я не знаю синтаксиса Py/Selenium/Splinter для выбора одного из номеров страниц в списке и нажатия на него, чтобы перейти на эту страницу. (Кроме того, мне нужно иметь возможность идентифицировать элемент в аргументе как, например, «Страница $10» или «Страница $12», как видно из нотации __doPostBack. Может быть, просто «следующая страница», если говорить так много слов, было бы хорошо, но я даже не знаю, как это сделать.)

Спасибо за любую помощь.

ОБНОВЛЕНИЕ II: вот код, с которым мне нужно работать:

import time
import win32ui
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from ctypes import *
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get('http://[site]');

ОБНОВЛЕНИЕ III:

Traceback (most recent call last):
  File "montpa_05.py", line 47, in <module>
    continue_link = driver.find_element_by_link_text('4')
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 246, in find_element_by_link_text
    return self.find_element(by=By.LINK_TEXT, value=link_text)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 680, in find_element
    {'using': by, 'value': value})['value']
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 165, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py"
, line 164, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: u'no such element\n
 (Session info: chrome=28.0.1500.95)\n  (Driver info: chromedriver=2.2,platform=
Windows NT 6.1 SP1 x86_64)'

person user225626    schedule 19.08.2013    source источник


Ответы (1)


Элемент <a> определяется как ссылка. Это означает, что вы можете выбрать его по тексту ссылки.

Я не знаю Python, но синтаксис java будет By.linkText(##), где ## — число, на которое вы хотите нажать.

person Nathan Merrill    schedule 19.08.2013
comment
MrTi, спасибо за ответ. Моя проблема в том, что если я нахожусь, скажем, в разделе ... 11 12 13 14 15 16 17 18 19 20 ... (это дословная строка на странице), каждый из этих многоточий выглядит идентично элементам ‹a› , однако внутри один из них называется «Page$10», а другой — «Page$21». Поэтому я не могу назвать ни конкретно, ни просто "...". - person user225626; 20.08.2013
comment
Да, но By.linkText работает иначе. На самом деле он вызывается видимым текстом, а не внутренними атрибутами. - person Nathan Merrill; 20.08.2013
comment
Пожалуйста, смотрите мой новый пост. - person user225626; 20.08.2013
comment
Извините, но я не понимаю, что вам нужно. Вы хотите нажать на номер страницы X? Вы хотите определить, на какой странице вы находитесь? Вы хотите проверить наличие атрибута HTML? - person Nathan Merrill; 20.08.2013
comment
Я хочу нажать на номер страницы X. HTML-код выглядит следующим образом: ‹a href=javascript:__doPostBack('ctl00$FormContent$gvResults','Page$4')›4‹/a›. Я добавил свой код выше в обновлении. - person user225626; 21.08.2013
comment
Текст ссылки будет работать. selenium-python.readthedocs. org/ru/последние/ - person Nathan Merrill; 21.08.2013
comment
Штопать. Я только что перешел по вашей ссылке и использовал это утверждение, и вот что отображается в командной строке (в ОБНОВЛЕНИИ II, выше). - person user225626; 21.08.2013
comment
MrTi, спасибо за это. Это работает, если я даю достаточно времени, чтобы экран изменился на тот, который содержит эту числовую последовательность (я помещаю перед ней инструкцию sleep()). Будучи новичком в этом, я не знал, насколько асинхронна эта библиотека. Спасибо еще раз. - person user225626; 21.08.2013