Похоже, просто добавьте #links
:
lead_link = item.find_element_by_css_selector("#links a.result__a").get_attribute("href")
Реклама внутри #ads
div
Вы можете указать идентификатор NIC:
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
if (nic.OperationalStatus == OperationalStatus.Up){
if (nic.Id == "yay!")
}
}
Это не MAC-адрес, но это уникальный идентификатор, если это то, что вы ищете.
ipconfig.exe
реализован с использованием различных библиотек DLL, включая iphlpapi.dll
... Поиск в Google для iphlpapi
показывает соответствующий Win32 API, задокументированный в MSDN.
Свойство MACAddress класса WMI Win32_NetworkAdapterConfiguration может предоставить вам MAC-адрес адаптера. (Пространство имен System.Management)
MACAddress
Data type: string
Access type: Read-only
Media Access Control (MAC) address of the network adapter. A MAC address is assigned by the manufacturer to uniquely identify the network adapter.
Example: "00:80:C7:8F:6C:96"
Если вы не знакомы с WMI API (инструментарием управления Windows), вы можете найти хороший обзор здесь для приложений .NET.
WMI доступен во всех версиях окон со средой выполнения .Net.
Вот пример кода:
System.Management.ManagementClass mc = default(System.Management.ManagementClass);
ManagementObject mo = default(ManagementObject);
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (var mo in moc) {
if (mo.Item("IPEnabled") == true) {
Adapter.Items.Add("MAC " + mo.Item("MacAddress").ToString());
}
}
WMI - лучшее решение, если машина, к которой вы подключаетесь, является машиной Windows, но если вы смотрите на сетевой адаптер linux, mac или другой тип сетевого адаптера, тогда вы нужно будет использовать что-то еще. Вот несколько вариантов:
Вот пример пункта №3. Это кажется лучшим вариантом, если WMI не является жизнеспособным решением:
using System.Runtime.InteropServices;
...
[DllImport("iphlpapi.dll", ExactSpelling = true)]
public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);
...
private string GetMacUsingARP(string IPAddr)
{
IPAddress IP = IPAddress.Parse(IPAddr);
byte[] macAddr = new byte[6];
uint macAddrLen = (uint)macAddr.Length;
if (SendARP((int)IP.Address, 0, macAddr, ref macAddrLen) != 0)
throw new Exception("ARP command failed");
string[] str = new string[(int)macAddrLen];
for (int i = 0; i < macAddrLen; i++)
str[i] = macAddr[i].ToString("x2");
return string.Join(":", str);
}
Чтобы отдать должное, где это необходимо, это основа для этого кода: http://www.pinvoke.net/default.aspx/iphlpapi.sendarp#
Вот код C #, который возвращает MAC-адрес первого рабочего сетевого интерфейса. Если предположить, что сборка NetworkInterface
реализована в среде выполнения (например, Mono), используемой в других операционных системах, тогда это будет работать и в других операционных системах.
Новая версия: возвращает сетевой адаптер с максимальной скоростью, который также имеет действительный MAC-адрес.
/// <summary>
/// Finds the MAC address of the NIC with maximum speed.
/// </summary>
/// <returns>The MAC address.</returns>
private string GetMacAddress()
{
const int MIN_MAC_ADDR_LENGTH = 12;
string macAddress = string.Empty;
long maxSpeed = -1;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
log.Debug(
"Found MAC Address: " + nic.GetPhysicalAddress() +
" Type: " + nic.NetworkInterfaceType);
string tempMac = nic.GetPhysicalAddress().ToString();
if (nic.Speed > maxSpeed &&
!string.IsNullOrEmpty(tempMac) &&
tempMac.Length >= MIN_MAC_ADDR_LENGTH)
{
log.Debug("New Max Speed = " + nic.Speed + ", MAC: " + tempMac);
maxSpeed = nic.Speed;
macAddress = tempMac;
}
}
return macAddress;
}
Исходная версия: возвращает только первый.
/// <summary>
/// Finds the MAC address of the first operation NIC found.
/// </summary>
/// <returns>The MAC address.</returns>
private string GetMacAddress()
{
string macAddresses = string.Empty;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
macAddresses += nic.GetPhysicalAddress().ToString();
break;
}
}
return macAddresses;
}
Единственное, что мне не нравится в этом подходе, это то, что у вас есть вроде Nortel Packet Miniport или какой-либо тип VPN-соединения, у которого есть потенциал быть выбранным. Насколько я могу судить, нет способа отличить MAC реального физического устройства от виртуального сетевого интерфейса какого-либо типа.