#python #selenium #datepicker
#python #selenium #datepicker
Вопрос:
Я пытаюсь выбрать дату начала и дату окончания из выбора даты, и я попытался указать дату начала:
driver.get('http://www.chinamoney.com.cn/chinese/zjfxzx/?tbnm=最新amp;tc=nullamp;isNewTab=1')
driver.implicitly_wait(10)
driver.refresh()
driver.implicitly_wait(10)
datefield = driver.find_element_by_id('pdbp-date-1').send_keys("2021-01-05")
Но календарь просто выпадает, но не щелкает, как я могу выбрать дату начала, а затем дату окончания из календаря? кроме того, как он мог ждать, пока не появится элемент календаря?
Заранее спасибо!
Комментарии:
1. Какова остальная часть вашего кода? Если я запускаю ваш код как есть, поле даже не отображается.
2. веб-сайт загружается так медленно, что вы можете сначала обновить его или просто скопировать веб-сайт, я не уверен, как дождаться появления элемента..
3. Это не проблема. Веб-сайт обнаруживает, что вы используете автоматический просмотр и намеренно не загружаете этот раздел.
4. Я обновляю вручную, он загрузится окончательно
5. Я внес поправки в код и обновил его, теперь все должно быть в порядке, чтобы найти элемент
Ответ №1:
Простое добавление useragent заставляет его работать правильно. Goalie намекал на обнаружение бота, и он не запускал Jquery.
from selenium.webdriver.chrome.options import Options
options = Options()
from fake_useragent import UserAgent
ua = UserAgent()
a = ua.random
user_agent = ua.random
print(user_agent)
options.add_argument(f'user-agent={user_agent}')
driver = webdriver.Chrome(options=options)
Вот случайный пользовательский агент
options.add_argument("user-agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2919.83 Safari/537.36")
Теперь к коду. Если это объект выбора даты jQuery, вы должны щелкнуть и выбрать свою дату. Год-> Месяц-> День — это порядок, который вы хотите щелкнуть. Если вам не разрешено использовать Select, просто щелкните тег и перейдите к параметрам, значение которых равно 1, или текст — это ваше значение. /option[text()=’January’] и так далее.
from selenium.webdriver.support.select import Select
wait = WebDriverWait(driver, 5)
driver.get('http://www.chinamoney.com.cn/chinese/zjfxzx/?tbnm=最新amp;tc=nullamp;isNewTab=1')
datefield = wait.until(EC.element_to_be_clickable((By.ID, "pdbp-date-1")))
datefield.click()
##<select class="ui-datepicker-year" data-handler="selectYear" data-event="change"></select>
select = Select(wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "ui-datepicker-year"))))
select.select_by_visible_text("2020")
##<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change"></select>
select2 = Select(wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "ui-datepicker-month"))))
select2.select_by_value("1")
day=1
wait.until(EC.element_to_be_clickable((By.XPATH, "//td[@data-handler='selectDay']/a[text()='{}']".format(str(day))))).click()
Комментарии:
1. Спасибо, но в настоящее время я не могу установить этот пакет, так можно ли просто использовать selenium? но все же календарь не будет нажимать на дату, просто выпадающий список календаря
2. О, просто добавьте любой пользовательский агент.
3. Спасибо, это сработало! но когда я перехожу к дате окончания, я попытался
datefield_ed = wait.until(EC.element_to_be_clickable((By.ID, "pdbp-date-2"))) datefield_ed.click() select_ed = Select(wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "ui-datepicker-year")))) select_ed.select_by_visible_text("2021") select2 = Select(wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "ui-datepicker-month")))) select2.select_by_value("2") day=2 wait.until(EC.element_to_be_clickable((By.XPATH, "//td[@data-handler='selectDay']/a[text()='{}']".format(str(day))))).click()
после кода, но говорит, что не удается найти 24. Месяцы начинаются со значения 0, а в 2021 году пока только 0,1. Просто оберните выбор в try и except.
5. Привет, Arundeep, не могли бы вы помочь мне проверить, почему это не может работать, когда я выбираю дату: конечная дата не может щелкнуть
datefield_st = wait.until(EC.element_to_be_clickable((By.ID, "start_date"))) datefield_st.click() day=1 wait.until(EC.element_to_be_clickable((By.XPATH, "//tr/td[text()='{}']".format(str(day))))).click() datefield_ed = wait.until(EC.element_to_be_clickable((By.ID, "end_date"))) datefield_ed.click() day_ed=1 wait.until(EC.element_to_be_clickable((By.XPATH, "//tr/td[text()='{}']".format(str(day_ed))))).click()
веб-сайт sse.com.cn/disclosure/bond/announcement/company