я не могу отказаться от мобильного телефона, так как получаю тот же результат проверки после нажатия на просмотр контакта с помощью Python Selen - PullRequest
1 голос
/ 17 октября 2019
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome(r'C:\chromedriver.exe')

driver.get('https://www.gigadocs.com/hyderabad/dentist')

driver.find_element_by_xpath('//*[@id="listingTab"]/div[2]/div/div[1]/div[1]/div/div[2]/div[2]/ul/li[1]/span'). click()

soup = BeautifulSoup(driver.page_source,'html.parser')

mobile = soup.find('ul',class_='detailsList')
print(mobile)

Я пытаюсь нажать на просмотр контакта, чтобы удалить номер мобильного телефона, но после нажатия получаю тот же вывод, что и просмотр контакта.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Вам не нужны накладные расходы на селен. Страница делает POST-запросы, используя идентификаторы для врача и клиники для получения телефонных номеров. Вы можете удалить эти идентификаторы с начальной страницы, а затем повторить эти запросы, чтобы получить номера телефонов. Я использую идентификатор доктора в качестве ключа для словаря и обновляю значения с помощью номера телефона.

import requests
from bs4 import BeautifulSoup as bs

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With': 'XMLHttpRequest'
}

data = {
  'doctorId': '3806',   #[data-doctor]
  'clinicId': '1519',   #[data-clinic]
  'clickSource': 'mobile'
}

with requests.Session() as s:
    s.headers = headers
    r = s.get('https://www.gigadocs.com/hyderabad/dentist')
    soup = bs(r.content, 'lxml')
    tel_numbers = {i['data-doctor']:i['data-clinic'] for i in soup.select('.appointmentBtn')}

    for k, v in tel_numbers.items():
        data['doctorId'] = k
        data['clinicId'] = v
        r = s.post('https://www.gigadocs.com/search/getmobilenumbers', data=data).json()
        tel_numbers[k] = r['mobile']

print(tel_numbers)
0 голосов
/ 17 октября 2019

Индуцируйте WebDriverWait и element_to_be_clickable() и нажмите на просмотр контакта, а затем получите тег li под тегом ul.

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
import time
driver = webdriver.Chrome(r'C:\chromedriver.exe')
driver.get('https://www.gigadocs.com/hyderabad/dentist')
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[@data-source='mobile'][text()='View Contact']"))).click()
time.sleep(1)
soup = BeautifulSoup(driver.page_source,'html.parser')
mobile = soup.find('ul',class_='detailsList')
print(mobile.find('li').text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...