Найти элемент, используя текст, содержащийся в заголовке / подзаголовке ссылки - PullRequest
2 голосов
/ 11 апреля 2020

Я пытаюсь выбрать ссылку, которая содержит название лекарства ALMOGRAN, номер 12.5 и буклет в сценарии, показанном ниже. Код, который я использую, пропускает этот элемент. в то время как для других названий лекарств он работает нормально. Каков наилучший способ отфильтровать и выбрать этот элемент на веб-странице (https://products.mhra.gov.uk/search/?query=almogran&page=1)

PIL

ALMOGRAN 12,5 МГ ПЛАНЕТЫ С ПОКРЫТИЕМ С ФИЛЬМОМ листовка MAH BRAND_PLPI 20774-1629.pdf
Code I am using :
elem7 = driver.find_element_by_xpath("//a[contains(., 'leaflet')and contains(.,'" +g+ "')]")
        link2 = elem7.get_attribute('href')
        time.sleep(15)

где g - число 12,5

Пожалуйста, помогите мне понять, где я ошибаюсь Я новичок ie. Спасибо ![enter image description here] 1

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Можете ли вы попробовать ниже xpath

g=12.5
//p[contains(text(),'leaflet') or contains(text(),'"+g+"')]//parent::a

или

g=12.5   

//a[contains(., 'leaflet') and contains(.,'"+g+"')]
0 голосов
/ 11 апреля 2020

Код, который вы нашли нужную ссылку

g = '12.5'
elem7 = driver.find_element_by_xpath(("//a[contains(., 'leaflet')and contains(.,'" + g + "')]"))
print(elem7.text)
link2 = elem7.get_attribute('href')
print(link2)

Результат

ALMOGRAN 12.5 MG FILM-COATED TABLETS
leaflet MAH BRAND_PLPI 20774-1629.pdf
https://mhraproductsprod.blob.core.windows.net/docs-20200406/bf115fe972a98836c2af4072a77e2aaa04bcfa24

Но это всегда первая ссылка на странице, которую вы найдете, потому что вы используете 'find_element ». Если вы проверите критерии поиска с помощью 'find_elements', вы увидите, что он действительно находит все 4 ссылки.

g = '12.5'
elements = driver.find_elements_by_xpath(("//a[contains(., 'leaflet')and contains(.,'" + g + "')]"))
for element in elements:
    print(element.text)
    link2 = element.get_attribute('href')
    print(link2)

Результат

ALMOGRAN 12.5 MG FILM-COATED TABLETS
leaflet MAH BRAND_PLPI 20774-1629.pdf
https://mhraproductsprod.blob.core.windows.net/docs-20200406/bf115fe972a98836c2af4072a77e2aaa04bcfa24
ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS
leaflet MAH BRAND_PLPI 20636-1099.pdf
https://mhraproductsprod.blob.core.windows.net/docs-20200406/3ef1e68659b17b5cbc6bed7988dd7d32d8ff5258
ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS
leaflet MAH BRAND_PLPI 18799-1153.pdf
https://mhraproductsprod.blob.core.windows.net/docs-20200406/91cb21381c4aea438fe87a49cfc4abd3557f7614
ALMOGRAN 12.5 MG FILM-COATED TABLETS,ALMOTRIPTAN 12.5 MG FILM-COATED TABLETS
leaflet MAH BRAND_PLPI 20636-2661.pdf
https://mhraproductsprod.blob.core.windows.net/docs-20200406/f30be6ab9c3e85abd455da4262ffaf5932813014

Так что, если бы ваше лекарство не было бы первым на странице ваш код нашел бы другое лекарство. Вы можете сделать свой критерий поиска более точным c. Другой способ - использовать find_elements и добавить что-то вроде 'if "дополнительные критерии" в element.text: ...' внутри для l oop.

. Поиск всех лекарств на странице

# ------------------------------------------------------------------
def find_medicine_leaflet(page_meds, med_name):
    print(f'\n------- searching for {med_name} -------')
    nr_found = 0
    for page_med in page_meds:
        if medicine_name in page_med.text:
            nr_found += 1
            text = page_med.text.replace('\n', ' - ')
            print(f"{nr_found} {text}\n  leaflet url: {page_med.get_attribute('href')}")
    print(f'------- {nr_found} found -------\n')


# ------------------------------------------------------------------
medicine_names = [
    'ALMOGRAN 12.5 MG FILM-COATED TABLETS',
    'ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS',
    'ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS',
    'ALMOGRAN 12.5 MG FILM-COATED TABLETS,ALMOTRIPTAN 12.5 MG FILM-COATED TABLETS',
]

g = '12.5'

page_medicines = driver.find_elements_by_xpath(("//a[contains(., 'leaflet')and contains(.,'" + g + "')]"))

for medicine_name in medicine_names:
    find_medicine_leaflet(page_medicines, medicine_name)

Результат

------- searching for ALMOGRAN 12.5 MG FILM-COATED TABLETS -------
1 ALMOGRAN 12.5 MG FILM-COATED TABLETS - leaflet MAH BRAND_PLPI 20774-1629.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/bf115fe972a98836c2af4072a77e2aaa04bcfa24
2 ALMOGRAN 12.5 MG FILM-COATED TABLETS,ALMOTRIPTAN 12.5 MG FILM-COATED TABLETS - leaflet MAH BRAND_PLPI 20636-2661.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/f30be6ab9c3e85abd455da4262ffaf5932813014
------- 2 found -------


------- searching for ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS -------
1 ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS - leaflet MAH BRAND_PLPI 20636-1099.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/3ef1e68659b17b5cbc6bed7988dd7d32d8ff5258
2 ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS - leaflet MAH BRAND_PLPI 18799-1153.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/91cb21381c4aea438fe87a49cfc4abd3557f7614
------- 2 found -------


------- searching for ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS -------
1 ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS - leaflet MAH BRAND_PLPI 20636-1099.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/3ef1e68659b17b5cbc6bed7988dd7d32d8ff5258
2 ALMOTRIPTAN 12.5MG TABLETS,ALMOGRAN 12.5MG TABLETS - leaflet MAH BRAND_PLPI 18799-1153.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/91cb21381c4aea438fe87a49cfc4abd3557f7614
------- 2 found -------


------- searching for ALMOGRAN 12.5 MG FILM-COATED TABLETS,ALMOTRIPTAN 12.5 MG FILM-COATED TABLETS -------
1 ALMOGRAN 12.5 MG FILM-COATED TABLETS,ALMOTRIPTAN 12.5 MG FILM-COATED TABLETS - leaflet MAH BRAND_PLPI 20636-2661.pdf
  leaflet url: https://mhraproductsprod.blob.core.windows.net/docs-20200406/f30be6ab9c3e85abd455da4262ffaf5932813014
------- 1 found -------

Насколько я понимаю, он ничего не пропускает. Из-за совпадения названий лекарств он может найти 2 листовки, но все находят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...